Kubernetes — система управления контейнерами¶
Kubernetes (сокращённо K8s) — открытая система оркестровки контейнеров, разработанная Google и переданная в управление Cloud Native Computing Foundation (CNCF). Она автоматизирует развёртывание, масштабирование и управление приложениями, упакованными в контейнеры. Название происходит от греческого слова «кибернетик» (κυβερνήτης, «рулевой»), а сокращение «K8s» образовано заменой восьми букв между «K» и «s» цифрой 8.
¶История
Kubernetes был создан в Google на основе опыта работы с системой контейнеризации Borg, использовавшейся внутри компании с 2003 года. Внутренний проект, названный «Project Seven», разрабатывался инженером Google Бренданом Бёрнсом совместно с Джо Дэйем и Крейгом Макмалленом. В июне 2014 года проект был открыт и представлен на конференции DockerCon.
В 2015 году исходный код Kubernetes был передан в Cloud Native Computing Foundation — некоммерческую организацию, объединяющую компании в сфере облачных технологий. Первая стабильная версия 1.0 вышла в июле 2015 года. С тех пор релизы выходят примерно раз в квартал.
Среди крупнейших контрибуторов проекта — Google, Red Hat, Microsoft, Amazon, VMware и другие компании. Red Hat стала одним из ключевых участников разработки и на её основе создана коммерческая платформа OpenShift.
¶Основные понятия
В Kubernetes всё управляемое приложение описывается декларативно в виде YAML- или JSON-манифестов. Основные объекты:
- Pod — наименьшая единица развёртывания; группа из одного или нескольких контейнеров с общей сетевой и файловой средой.
- Node — физическая или виртуальная машина, на которой работают поды. Бывает двух типов: master (управляющий узел) и worker (рабочий узел).
- Deployment — объект, описывающий желаемое состояние набора подов и обеспечивающий его достижение (например, автоматический перезапуск упавших подов).
- Service — абстракция, обеспечивающая доступ к группе подов по стабильному сетевому адресу и внутреннему DNS-имени.
- Namespace — логическое разделение ресурсов кластера.
- ConfigMap / Secret — хранение конфигураций и чувствительных данных отдельно от образов контейнеров.
- Ingress — управление внешним HTTP(S)-доступом к сервисам.
- DaemonSet, StatefulSet, Job — дополнительные типы контроллеров для специфичных сценариев развёртывания.
¶Архитектура
Кластер Kubernetes состоит из набора управляющих компонентов (control plane) и рабочих узлов.
¶Control plane
- kube-apiserver — центральный компонент, REST API которого принимает все команды и манифесты.
- etcd — распределённое хранилище ключ-значение, в котором хранится всё состояние кластера.
- kube-scheduler — назначает новые поды на конкретные узлы с учётом ресурсов и политик.
- kube-controller-manager — запускает контроллеры, следящие за состоянием подов, репликаций, узлов и других объектов.
- cloud-controller-manager — интеграция с API облачных провайдеров (создание балансировщиков, дисков и т. д.).
¶Рабочие узлы
- kubelet — агент, следящий за тем, чтобы поды на узле работали и имели нужные ресурсы.
- kube-proxy — обеспечивает маршрутизацию сетевых трафиков к сервисам.
- Контейнерный рантайм — Docker, containerd или CRI-O, непосредственно запускающий контейнеры.
Сеть подов обеспечивается отдельными плагинами (CNI), например Calico, Flannel или Cilium.
¶Принцип работы
Пользователь или система отправляет в API-сервер декларативное описание желаемого состояния (например, «запусти 3 копии веб-сервера»). Контроллеры сравнивают текущее состояние с желаемым и выполняют действия для их сближения: создают или удаляют поды, перезапускают упавшие процессы, масштабируют приложение. Планировщик распределяет поды по узлам. Такой цикл «наблюдение — сравнение — действие» называется control loop.
¶Применение
Kubernetes стал де-факто стандартом для развёртывания микросервисных приложений в облаке и в собственных дата-центрах. Он используется для:
- запуска веб-приложений и API;
- обработки очередей и стриминга данных;
- машинного обучения и аналитики;
- гибридных и мультиоблачных сценариев.
Управляемые кластеры Kubernetes предоставляют российские облачные провайдеры: Яндекс Облако (Managed Kubernetes), Selectel, VK Cloud, Timeweb Cloud, а также зарубежные — Amazon EKS, Google GKE, Azure AKS.
¶Альтернативы и родственные проекты
Прямых открытых альтернатив Kubernetes немного. Среди упоминаемых — Docker Swarm, упрощённая система оркестровки от Docker Inc., и HashiCorp Nomad. Существуют также упрощённые платформы на основе Kubernetes — Rancher, OpenShift, Tanzu.
¶Интересные факты
- Логотип Kubernetes — семьугольник, изображающий штурманское колесо.
- В русскоязычном сообществе проект неформально называют «кубернетикс» или «кабернетес».
- Ежегодно проводится конференция KubeCon, организуемая CNCF; в 2024 году её российское отделение провело отдельное мероприятие KubeCon Russia.
¶Источники
- Документация Kubernetes (kubernetes.io)
- CNCF Annual Reports
- «Kubernetes: Design and Implementation of Container Orchestration Systems» — Brendan Burns, Joe Beda, Kelsey Hightower (O'Reilly, 2017)
- Материалы конференций KubeCon
