Kubernetes (k8s) — открытая система оркестрации контейнеров. Разработана Google, основана на опыте Borg — внутренней системы, управляющей всеми сервисами Google. Open-sourced в 2014, сейчас де-факто стандарт.
Проблема, которую решает
- Как запустить 1000 контейнеров?
- Что делать, если контейнер упал?
- Как распределить нагрузку?
- Как обновить приложение без даунтайма?
- Как масштабировать автоматически?
Базовые абстракции
- Pod: один или несколько контейнеров, работающих вместе
- Deployment: желаемое состояние (сколько реплик)
- Service: стабильный endpoint для набора подов
- Ingress: маршрутизация HTTP
- ConfigMap, Secret: конфигурация и секреты
- Volume: хранилище
- Namespace: логическое разделение
Архитектура
- Control plane: API server, etcd, scheduler, controller manager
- Worker nodes: kubelet, kube-proxy, контейнерный рантайм (containerd, CRI-O)
Декларативность
В YAML описываете: "хочу 5 реплик nginx:1.27". K8s сам проверяет, что есть 5 работающих, и чинит расхождения.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 5
selector:
matchLabels: {app: nginx}
template:
metadata:
labels: {app: nginx}
spec:
containers:
- name: nginx
image: nginx:1.27Самолечение
- Контейнер упал → restart
- Под не запустился → перепланирование на другой node
- Node упал → поды переезжают
Масштабирование
- Вручную: kubectl scale --replicas=20
- HPA (Horizontal Pod Autoscaler): по CPU, памяти, custom метрикам
- VPA (Vertical): меняет ресурсы для существующих подов
- Cluster Autoscaler: добавляет/убирает ноды
Rolling updates
Обновление без даунтайма. Поды заменяются постепенно. Если новая версия падает — откат автоматический.
Сеть
- Pod IP: каждый под имеет свой IP
- Service: виртуальный IP + load balancing
- DNS: services.namespace.svc.cluster.local
- Network Policies: файрвол между подами
- CNI plugins: Calico, Cilium, Flannel
Хранилище
- PersistentVolume, PersistentVolumeClaim
- StorageClass: динамическое выделение
- AWS EBS, GCP PD, NFS, Ceph
- StatefulSet: для stateful приложений (БД)
Экосистема
- Helm: менеджер пакетов. Чарты для установки сложных приложений
- Kustomize: настройка манифестов без шаблонов
- ArgoCD, Flux: GitOps — деплой из git-репозитория
- Istio, Linkerd: Service Mesh
- Prometheus, Grafana: мониторинг
- cert-manager: автоматические SSL-сертификаты
- Kubernetes Dashboard, Lens: UI
Управляемые K8s
- AWS EKS
- GCP GKE
- Azure AKS
- Yandex Managed Kubernetes
- Платите за управление, получаете обновления, HA
Локальная разработка
- Minikube: один node в VM
- kind (K8s in Docker): кластер в контейнерах
- k3s, k3d: облегчённая версия
- Docker Desktop: встроенный K8s
Когда не стоит
- Одно маленькое приложение: overkill
- Команда без опыта: крутая кривая обучения
- Нет микросервисов: монолит может жить в Docker Compose
- Недостаточно ресурсов: control plane сам ест CPU/память
Когда стоит
- Много микросервисов
- Нужно масштабирование
- Разные окружения (dev, staging, prod)
- Большая команда
- Требуется высокая доступность
Сложность
K8s — сложная система. 6 месяцев до базовой продуктивности, 2+ года до мастерства. Сертификация CKA, CKAD, CKS. Часто нужен выделенный инженер платформы.
Ресурсы
- Документация kubernetes.io
- "Kubernetes in Action" (Лукша)
- Official tutorials
- CNCF (Cloud Native Computing Foundation) — организация
Есть вопрос?
Вопросы и ответы · 0
Не поняли что-то?
Зарегистрируйтесь — и сможете задать вопрос автору объяснения.
Загрузка комментариев…