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.