Практический кластер: kind + Deckhouse CE
Что нужно знать перед уроком
- M0.02 — Установка инструментов — нужны установленные docker/kubectl/d8
Что нужно знать перед уроком
M0 урок 2 — установленные docker, kubectl, d8. В этом уроке мы поднимаем кластер, на котором пройдёт весь оставшийся курс.
Теория
Зачем kind, а не облачный кластер
kind (Kubernetes IN Docker) — инструмент для запуска полноценного multi-node Kubernetes-кластера внутри Docker-контейнеров на локальной машине. Для целей курса это оптимальный вариант: кластер поднимается за пару минут, полностью воспроизводим (kind delete cluster + заново создать — и вы в чистом состоянии), не требует облачного аккаунта или оплаты, и при этом это настоящий Kubernetes API — все команды kubectl/d8 k работают одинаково что здесь, что в продакшене.
Deckhouse Community Edition (CE) можно установить на любой Kubernetes, соответствующий минимальным требованиям — команда Deckhouse поддерживает официальный сценарий установки именно на kind для тестирования и обучения.
Что происходит при установке Deckhouse CE на kind
Официальный сценарий, подтверждённый документацией Deckhouse, — единый скрипт kind-d8.sh, который создаёт кластер kind с уже подготовленной конфигурацией (проброшенные порты, нужные точки монтирования для CNI) и сразу устанавливает на него Deckhouse CE:
| |
Скрипт интерактивно спросит несколько параметров (например, release channel Deckhouse — по умолчанию разумно взять stable) и выполнит всю последовательность из диаграммы выше автоматически. Процесс занимает несколько минут — на этом этапе Deckhouse скачивает и разворачивает свои базовые модули.
Тот же скрипт можно скачать напрямую со страницы урока — kind-d8.sh (снимок на момент написания урока, лицензия Apache-2.0) — и запустить локально:
| |
Актуальная версия всегда живёт в оригинальном репозитории Deckhouse: deckhouse/deckhouse/tools/kind-d8.sh. Если после выхода курса скрипт обновится (новая версия kind/kubectl, другой образ узла и т. п.), ориентируйтесь на версию из репозитория, а не на копию из урока.
Чем этот кластер отличается от «боевого»
Дальше по курсу все команды kubectl/d8 k даются в расчёте именно на этот кластер, но важно заранее понимать отличия от продакшен/staging-кластера:
| Аспект | kind + Deckhouse CE (этот курс) | Типичный прод/staging |
|---|---|---|
| Число узлов | 1–2 (control-plane + опционально worker), всё в Docker на одной машине | десятки узлов, реальное железо/облако |
| Внешний доступ | через проброс портов Docker на localhost | реальный балансировщик/DNS |
| Хранилище | локальный StorageClass на диске Docker-хоста | сетевой storage (Ceph/CSI облачного провайдера) |
| Edition | Community Edition — нет d8 mirror/d8 delivery-kit, ограниченный набор модулей | Enterprise/Basic Edition — полный набор |
| HA control-plane | нет (единая точка) | обычно есть (несколько control-plane узлов) |
| Персистентность между перезапусками | контейнеры kind эфемерны — легко пересоздать с нуля | кластер живёт постоянно |
Linux / Сети / Docker
Как kind использует Docker
Каждый «узел» кластера kind — это отдельный Docker-контейнер, внутри которого запущен полноценный container runtime (containerd) — то есть у вас получается контейнер в контейнере (сам kind-узел — контейнер Docker, а Pod’ы внутри кластера — контейнеры containerd внутри этого узла). Это работает благодаря тому, что образ узла kind включает предустановленный containerd и все системные компоненты Kubernetes уже «зашитыми» в образ, а не устанавливаемыми поверх заново при каждом старте.
| |
Проверка сетевой доступности API-сервера
| |
Практика в кластере
- Установите кластер (актуальный скрипт по
curlили локальная копияkind-d8.shсо страницы урока):
| |
- Проверьте, что узлы кластера видны и находятся в состоянии
Ready:
| |
Точный номер версии в вашем выводе может отличаться — в отличие от «боевых» kubeadm-кластеров, где Deckhouse сам управляет версией Kubernetes через kubernetesVersion: Automatic (дефолт на момент написания урока — 1.33, платформа поддерживает диапазон вплоть до 1.35), здесь control-plane уже готов внутри образа kind, и версия Kubernetes жёстко зафиксирована переменными KIND_IMAGE/KUBECTL_VERSION прямо в kind-d8.sh (на момент написания урока — v1.31.6, что попадает в поддерживаемый платформой диапазон) — ориентируйтесь на VERSION из вашего собственного вывода и на актуальное содержимое скрипта, а не на конкретную цифру из примера.
- Проверьте, что Deckhouse установлен и его модули включаются:
| |
- Посмотрите общий статус платформы:
| |
- Проверьте статусную модель одного модуля через conditions (пригодится для troubleshooting в M2 уроке 3 и M10 уроке 10):
| |
- Создайте тестовый namespace для будущей практики (в M1 мы будем создавать по одному namespace на урок, чтобы не смешивать примеры):
| |
Практика разработки
В этом уроке сборки/деплоя ещё нет — она появится в M3. Но полезно уже сейчас убедиться, что werf/docker могут достучаться до вашего локального container runtime:
| |
Шпаргалка команд урока
| |
Вопросы для самопроверки
kind поднимает control-plane и worker-узлы как Docker-контейнеры, внутри каждого работает containerd — получается «контейнер в контейнере».
Источник: kind — документация
d8 k get modules — прямой аналог kubectl get с CRD модулей платформы Deckhouse, показывает WEIGHT/STATE/PHASE/ENABLED.
Источник: Рекомендуемая литература
d8 mirror (офлайн-копирование) и d8 delivery-kit (build/publish/plan/deploy) — функции старших редакций, недоступные в CE/BE.
Источник: Deckhouse — Deckhouse-cli
kind delete cluster уничтожает все контейнеры узлов кластера — это эфемерная среда, полностью пересоздаваемая с нуля.
Источник: kind — документация
Рекомендуемая литература
Официальная документация
- kind.sigs.k8s.io — Quick Start.
- Официальный скрипт
kind-d8.shв репозитории Deckhouse (источник актуальной версии): github.com/deckhouse/deckhouse/blob/main/tools/kind-d8.sh. - Локальная копия
kind-d8.sh— снимок скрипта на момент написания урока, лежит рядом с этой страницей для скачивания без доступа к GitHub. - Deckhouse — Release notes Deckhouse
Статьи и блоги
- Установка Deckhouse в kind: пробуем K8s-платформу на ноутбуке — Flant на Habr.
- Разворачиваем приложение в кластере Kubernetes под управлением Deckhouse c помощью werf — Flant на Habr.
- Первые шаги с werf: собираем и деплоим простое приложение в Kubernetes — Flant на Habr.
Книги
- Marko Lukša. Kubernetes in Action. 2nd ed., 2022. ISBN 978-1617297618.
Связанные материалы
- Предыдущий урок: M0.02 — Установка инструментов.
- Следующий модуль: M1 — Kubernetes с нуля, урок 1 — Pod и контейнеры.
- Шпаргалки: 📋 kubectl , 📋 d8 .
✓ Урок пройден — все вопросы самопроверки отвечены верно