Раздел 18. Docker и Kubernetes
Вопрос «Docker или Kubernetes» поставлен неверно, но задают его постоянно. Это инструменты для разных задач: Docker собирает и запускает container на одной машине, Kubernetes управляет множеством containers на множестве машин. Они находятся на разных уровнях, а не конкурируют.
Раздел обзорный, но технически точный. Его цель — не научить работать с Kubernetes, а дать достаточно понимания, чтобы обоснованно отвечать на вопрос «нужен ли он нам» и не принимать решение по инерции или моде.
Отдельная тема — переносимость. Образ, собранный по правилам этого курса, запустится в Kubernetes без изменений. Всё, что вы изучили про non-root, healthchecks, graceful shutdown, конфигурацию через environment и resource limits, переносится напрямую. Это делает курс подготовкой к Kubernetes, даже не будучи курсом по нему.
Цели обучения
После раздела учащийся сможет:
- сформулировать, какую задачу решает Docker и какую — Kubernetes;
- объяснить, почему они не являются прямыми конкурентами;
- объяснить, что означало «Kubernetes отказался от Docker» и почему это не повлияло на образы;
- описать основные объекты Kubernetes: pod, deployment, service, configmap, secret, volume;
- сопоставить конструкции Compose с объектами Kubernetes;
- объяснить назначение liveness, readiness и startup probes и их связь с healthcheck;
- объяснить разницу между requests и limits и её последствия для планирования;
- определить, когда Compose достаточно, а когда orchestration становится необходимой;
- перечислить, что нужно изменить в приложении при переходе на Kubernetes, а что уже готово.
Предварительные знания
- Раздел 09. Docker Compose — описание многокомпонентной системы;
- Раздел 11. Production — healthchecks, resource limits, конфигурация;
- Раздел 02. Основы Containerization — OCI и container runtime.
Материалы
-
Какие задачи решают Docker и Kubernetes
Задача Docker: собрать образ и запустить container на машине. Задача Kubernetes: поддерживать заданное состояние на кластере. Уровни абстракции. Что означал отказ отdockershimи почему образы это не затронуло. Роль OCI как связующего стандарта. Container runtime в Kubernetes: containerd, CRI-O. -
Объекты Kubernetes
Pod как минимальная единица и почему это не то же самое, что container. Deployment и ReplicaSet. Service и его типы. ConfigMap и Secret. Volume, PersistentVolumeClaim. Probes: liveness, readiness, startup. Requests и limits: как влияют на планирование и на поведение под нагрузкой. Namespace как единица изоляции. -
От Compose к Kubernetes
Таблица соответствий: service → Deployment + Service,environment→ ConfigMap, secrets → Secret,depends_on→ probes и retry, named volume → PVC,deploy.resources→ requests и limits. Что переносится напрямую, что требует переосмысления. Почему автоматическая конвертация даёт плохой результат. Практический разбор миграции стека из раздела 09. -
Когда нужна orchestration
Признаки, что Compose достаточно. Признаки, что его перестаёт хватать: несколько узлов, требования к доступности, автоматическое масштабирование, сложные развёртывания, много команд на общей инфраструктуре. Стоимость Kubernetes: обучение, эксплуатация, отладка. Промежуточные варианты. Честный чек-лист для принятия решения. -
Практические задания
Задания раздела. Kubernetes-кластер не требуется — задания аналитические и на переносимость образа.
Рекомендуемый порядок чтения
Последовательный: 01 → 02 → 03 → 04 → exercises.
Урок 04 — самый практически ценный. Если читаете выборочно, начните с него, а к 01–03 обращайтесь за терминологией.
Практические задания
| № | Задание | Тип |
|---|---|---|
| 1 | Составить таблицу соответствий между своим compose.yaml и объектами Kubernetes | обяз. |
| 2 | Проверить образ из проекта 2 на готовность к Kubernetes по списку требований | обяз. |
| 3 | Объяснить, что изменится в конфигурации приложения при переходе, а что останется | обяз. |
| 4 | Разделить healthcheck на liveness и readiness с разной логикой и обосновать разделение | доп. |
| 5 | Заполнить чек-лист принятия решения для конкретного проекта и сформулировать вывод | доп. |
| 6 | Дан сервис, хранящий состояние в локальном каталоге. Объяснить, что сломается при масштабировании в Kubernetes | ★ |
Полные формулировки — в exercises.md.
Критерии завершения раздела
Раздел пройден, когда учащийся может без подсказок:
- Объяснить за две минуты разницу задач Docker и Kubernetes, не противопоставляя их.
- Объяснить, почему отказ Kubernetes от
dockershimне потребовал пересборки образов. - Назвать различие между requests и limits и последствия неверной настройки каждого.
- Сопоставить пять конструкций Compose с объектами Kubernetes.
- Сформулировать три критерия, по которым можно судить о необходимости orchestration.
- Назвать, что в его текущем приложении помешает запуску в Kubernetes.
Проверьте себя: Quiz 18.
Что дальше
Последний раздел курса — о границах. Он собирает случаи, когда контейнеризация не помогает, а мешает.
Навигация
← Предыдущий раздел: Docker internals
Вернуться к главному оглавлению
Следующий раздел: Ограничения Docker →