Открыть сервисСервис

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
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru