Главная/Docker и Kubernetes/Обзор

Раздел 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, а что уже готово.

Предварительные знания

Материалы

  1. Какие задачи решают Docker и Kubernetes
    Задача Docker: собрать образ и запустить container на машине. Задача Kubernetes: поддерживать заданное состояние на кластере. Уровни абстракции. Что означал отказ от dockershim и почему образы это не затронуло. Роль OCI как связующего стандарта. Container runtime в Kubernetes: containerd, CRI-O.

  2. Объекты Kubernetes
    Pod как минимальная единица и почему это не то же самое, что container. Deployment и ReplicaSet. Service и его типы. ConfigMap и Secret. Volume, PersistentVolumeClaim. Probes: liveness, readiness, startup. Requests и limits: как влияют на планирование и на поведение под нагрузкой. Namespace как единица изоляции.

  3. От Compose к Kubernetes
    Таблица соответствий: service → Deployment + Service, environment → ConfigMap, secrets → Secret, depends_on → probes и retry, named volume → PVC, deploy.resources → requests и limits. Что переносится напрямую, что требует переосмысления. Почему автоматическая конвертация даёт плохой результат. Практический разбор миграции стека из раздела 09.

  4. Когда нужна orchestration
    Признаки, что Compose достаточно. Признаки, что его перестаёт хватать: несколько узлов, требования к доступности, автоматическое масштабирование, сложные развёртывания, много команд на общей инфраструктуре. Стоимость Kubernetes: обучение, эксплуатация, отладка. Промежуточные варианты. Честный чек-лист для принятия решения.

  5. Практические задания
    Задания раздела. 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.

Критерии завершения раздела

Раздел пройден, когда учащийся может без подсказок:

  1. Объяснить за две минуты разницу задач Docker и Kubernetes, не противопоставляя их.
  2. Объяснить, почему отказ Kubernetes от dockershim не потребовал пересборки образов.
  3. Назвать различие между requests и limits и последствия неверной настройки каждого.
  4. Сопоставить пять конструкций Compose с объектами Kubernetes.
  5. Сформулировать три критерия, по которым можно судить о необходимости orchestration.
  6. Назвать, что в его текущем приложении помешает запуску в Kubernetes.

Проверьте себя: Quiz 18.

Что дальше

Последний раздел курса — о границах. Он собирает случаи, когда контейнеризация не помогает, а мешает.

Навигация

← Предыдущий раздел: Docker internals
Вернуться к главному оглавлению
Следующий раздел: Ограничения Docker →

Markdown на GitHub ↗