Зачем оркестратор и архитектура Kubernetes

↑ Этап 5 · Kubernetes

Желательно~4 мин чтенияУровень: middle

Зачем это на собесе

Базовый вопрос про Kubernetes: какие проблемы он решает и из каких компонентов состоит.

Проблемы, которые решает оркестратор

Контейнеры решают упаковку, но в проде возникают задачи: на каких серверах запускать, как перезапускать упавшие, как масштабировать, как обновлять без простоя, как находить друг друга и балансировать, где хранить конфигурации и секреты, как ограничивать ресурсы.

Kubernetes (K8s) — оркестратор контейнеров: декларативно описываем желаемое состояние, а контроллеры постоянно приводят реальность к нему (reconciliation loop).

Возможности: планирование подов по нодам, самовосстановление (перезапуск, замена при падении узла), горизонтальное масштабирование, rolling updates и откаты, service discovery и балансировка, конфигурации и секреты, управление хранилищами, batch-задачи, расширяемость (CRD, операторы).

Архитектура

                   ┌──────────────────── Control Plane ────────────────────┐
kubectl/CI ──HTTPS─▶ kube-apiserver ◀──▶ etcd (хранилище состояния)
                   │      ▲     ▲
                   │  kube-scheduler   kube-controller-manager   cloud-controller-manager
                   └────────────────────────────────────────────────────────┘
                                   │
        ┌──────────────────────────┴───────────────────────────┐
        ▼ Node 1                                               ▼ Node N
   kubelet ─ container runtime (containerd) ─ pods       kubelet ... 
   kube-proxy (Service → iptables/IPVS)   CNI-плагин (сеть подов)

Control plane

КомпонентРоль
kube-apiserverединая точка входа REST API: аутентификация, авторизация (RBAC), admission, валидация; единственный, кто пишет в etcd
etcdраспределённое хранилище ключ-значение (Raft) со всем состоянием кластера; критичен для бэкапов и HA
kube-schedulerвыбирает ноду для нового пода (ресурсы, affinity, taints, топология)
kube-controller-managerнабор контроллеров: Node, ReplicaSet, Deployment, Job, EndpointSlice, ServiceAccount…
cloud-controller-managerинтеграция с облаком (LoadBalancer, диски, маршруты)

Node (рабочий узел)

КомпонентРоль
kubeletагент: получает PodSpec, управляет контейнерами через CRI, проверяет probes, отчитывается о статусе
Container runtimecontainerd / CRI-O (через CRI)
kube-proxyреализует Service: правила iptables/IPVS/nftables (или заменён eBPF в Cilium)
CNI-плагинсеть подов: Calico, Cilium, Flannel, Weave
CSI-драйверытома

Основные объекты

ОбъектНазначение
Podминимальная единица: один или несколько контейнеров с общей сетью и томами
ReplicaSetподдерживает N реплик пода
Deploymentдекларативное управление ReplicaSet: rolling update, откат
StatefulSetприложения с состоянием (стабильные имена, тома)
DaemonSetпод на каждой ноде (агенты логов/мониторинга)
Job / CronJobразовые и периодические задачи
Serviceстабильный адрес и балансировка между подами
Ingress / Gatewayвнешний L7-доступ
ConfigMap / Secretконфигурация и секреты
PersistentVolume / PVC / StorageClassпостоянное хранилище
Namespaceлогическая изоляция ресурсов, квоты, права
ServiceAccount, Role/RoleBindingидентичность и RBAC
HPA/VPA, PDB, NetworkPolicy, LimitRange, ResourceQuotaмасштабирование, доступность, сетевые политики, лимиты
CRD / Operatorрасширение API, автоматизация сложных систем

Все объекты — YAML/JSON с полями apiVersion, kind, metadata (name, namespace, labels, annotations), spec (желаемое), status (фактическое).

Принцип работы

  1. kubectl apply -f deployment.yaml → API server валидирует и сохраняет в etcd.
  2. Контроллер Deployment создаёт ReplicaSet → контроллер RS создаёт Pod-объекты (без ноды).
  3. Scheduler назначает ноду (spec.nodeName).
  4. kubelet на ноде видит под, через CRI запускает контейнеры, настраивает сеть (CNI) и тома.
  5. kubelet отчитывается о статусе; контроллеры следят за отклонениями и исправляют.

Watch-механизм: компоненты подписываются на изменения API, а не опрашивают.

Labels и selectors

Метки (app: api, tier: backend) — основной механизм связи: Service выбирает поды по селектору, Deployment управляет подами по matchLabels. Аннотации — несистемные метаданные.

Дистрибутивы и способы развёртывания

  • управляемые: EKS, GKE, AKS, Yandex Managed Kubernetes, VK Cloud: control plane обслуживает провайдер;
  • self-managed: kubeadm, k3s/RKE2 (лёгкие), Talos, OpenShift, Kubespray, Cluster API;
  • локально: kind, minikube, k3d, Docker Desktop.

Когда Kubernetes нужен, а когда нет

Нужен: много сервисов и команд, требования к отказоустойчивости и автомасштабированию, частые релизы, гибридные/мультиоблачные среды, стандартизация платформы.

Не нужен: один-два сервиса, небольшая команда, стабильная нагрузка — достаточно docker compose/systemd/PaaS (Fly, Render), Nomad, ECS. Kubernetes добавляет сложность (сеть, безопасность, обновления, стоимость, компетенции).

Вопросы с ответами