FourLecture.md 5.2 KB

Лекция 4: Оркестрация контейнеров: от cgroups до declarative deployment в Kubernetes

Оркестрация контейнеров — это процесс автоматизации развертывания, масштабирования, управления сетью и обеспечения отказоустойчивости контейнеризированных приложений. Решение этой задачи выросло из необходимости управлять сотнями и тысячами изолированных процессов (контейнеров), работающих в распределенном кластере машин. Kubernetes (K8s), ставший отраслевым стандартом, абстрагирует отдельные физические или виртуальные машины в единый вычислительный ресурсный пул, предоставляя API для декларативного описания желаемого состояния приложения.

Фундаментальной технологической основой является изоляция процессов на уровне ОС через механизмы ядра Linux: cgroups (control groups) для ограничения ресурсов (CPU, memory) и namespaces для изоляции сетевого стека, файловой системы и процессов. Контейнер (например, Docker) — это упакованный процесс со своей средой, использующий эти механизмы. Kubernetes не создает контейнеры, а работает с ними как с атомарными единицами развертывания, упакованными в Pod — минимальную deployable unit, которая может содержать один или несколько тесно связанных контейнеров.

Таблица 4. Основные объекты Kubernetes и их аналогии

Объект Kubernetes Абстракция / Аналог Декларативная цель Кто обеспечивает?
Pod (Под) Виртуальный «хост» для контейнеров. Запустить одну или несколько контейнеров на одном узле с общим сетевым пространством и хранилищем. Kubelet (агент на узле).
Deployment (Развертывание) Declaration of Replica Set для stateless-приложения. Поддерживать заданное количество идентированных реплик Pod'ов, обеспечивая rolling updates и rollback. Deployment Controller (часть Control Plane).
Service (Сервис) Стабильная сетевая endpoint и балансировщик нагрузки. Предоставить стабильный DNS-имя и IP для доступа к динамическому набору Pod'ов (по селектору labels). kube-proxy (сетевой прокси на узлах).
ConfigMap / Secret Внешняя конфигурация и чувствительные данные. Отделить конфигурацию от образа контейнера. Предоставить ее Pod'ам в виде переменных окружения или файлов. Kubelet (монтирует данные в Pod).

Ключевой парадигмой K8s является декларативное управление состоянием через control loop. Пользователь описывает желаемое состояние в YAML-манифесте (например, replicas: 3). Контроллеры (controllers) в Control Plane (например, Deployment Controller) постоянно наблюдают за реальным состоянием кластера и, обнаружив расхождение (например, упал 1 Pod), выполняют действия для приведения реальности к декларации (запускают новый Pod). Этот принцип делает систему самоисцеляющейся (self-healing) и предсказуемой.

Таким образом, оркестрация контейнеров с помощью Kubernetes — это эволюция абстракций управления вычислительными ресурсами, поднимающая уровень абстракции от отдельных машин и скриптов развертывания до глобального «операционной системы для дата-центра», где приложение определяется его желаемым состоянием, а система гарантирует его поддержание.