Kubernetes

Система, которая управляет контейнерами на множестве серверов: запускает, перезапускает при сбоях, масштабирует и обновляет без простоя.

Kubernetes (сокращенно K8s) — система оркестрации контейнеров. Если Docker умеет запустить контейнер на одном сервере, то Kubernetes управляет сотнями контейнеров на десятках серверов: решает, где что запустить, следит за здоровьем, перезапускает упавшее, добавляет копии под нагрузкой и обновляет приложения без остановки. Проект открыла компания Google в 2014 году на основе опыта своих внутренних систем; сейчас его развивает фонд CNCF.

Главный принцип — желаемое состояние

В Kubernetes не дают команды «запусти три копии». Вместо этого описывают, каким должно быть состояние, а система сама приводит к нему реальность и поддерживает его.

# YAML (манифест Kubernetes)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: billing
spec:
  replicas: 3
  selector:
    matchLabels: { app: billing }
  template:
    metadata:
      labels: { app: billing }
    spec:
      containers:
        - name: billing
          image: registry.example.ru/billing:1.4.2
          ports:
            - containerPort: 8000

Описание говорит: «всегда должно работать три копии сервиса billing версии 1.4.2». Упал сервер с одной копией — Kubernetes запустит ее на другом. Поменяли версию на 1.4.3 — копии будут заменены по одной, без простоя.

Основные понятия

  • Кластер — набор серверов (узлов) под управлением Kubernetes.
  • Под (pod) — минимальная единица запуска: один или несколько контейнеров.
  • Deployment — сколько копий приложения держать и как их обновлять.
  • Service — постоянный адрес для группы подов с встроенной балансировкой нагрузки.
  • Ingress — вход снаружи: правила, какие адреса сайта ведут к каким сервисам, работает как обратный прокси.
  • ConfigMap и Secret — настройки и секреты отдельно от образа.

Что дает

  • Самовосстановление — упавшие контейнеры перезапускаются автоматически.
  • Масштабирование — число копий может расти и уменьшаться вслед за нагрузкой.
  • Обновления без простоя и быстрый откат к прошлой версии.
  • Независимость от площадки — одни и те же описания работают в разных облаках и на своих серверах.

Kubernetes в России

Управляемые кластеры предлагают российские облака — Yandex Cloud, VK Cloud, Selectel и другие. Для собственных серверов есть отечественные платформы на основе Kubernetes, например Deckhouse, включенная в реестр российского ПО. Это делает Kubernetes доступным и для проектов с требованиями импортозамещения.

Когда он не нужен

Kubernetes — сложная система, которой нужно уметь управлять: сети, хранилища, права, обновления самого кластера, мониторинг через Prometheus и Grafana. Для одного-двух приложений обычно хватает Docker на нескольких серверах. Kubernetes окупается, когда сервисов много, команды выкатывают обновления часто, а требования к доступности высоки — как в системах на микросервисах с развитым DevOps.