Kubernetes изнутри: что происходит, когда вы деплоите контейнер
Control Plane, Worker Nodes, etcd, kubelet — слова знакомые, но мало кто может объяснить, как они связаны. Разбираем архитектуру K8s от первого запроса до живого пода.
Kubernetes изнутри: что происходит, когда вы деплоите контейнер
Control Plane, Worker Nodes, etcd, kubelet — слова знакомые, но мало кто может объяснить, как они связаны. Разбираем архитектуру K8s от первого запроса до живого пода.
Kubernetes управляет тысячами контейнеров в продакшене у Netflix, Spotify и половины корпоративного мира. При этом его архитектура на удивление логична — если один раз разобраться, как устроены её части.
Два мира: Control Plane и Worker Nodes
Весь кластер делится на две зоны ответственности. Control Plane — мозг системы: принимает решения, хранит состояние, раздаёт команды. Worker Nodes — мышцы: здесь реально запускаются ваши контейнеры.
API Server
Единственная точка входа. Все компоненты говорят только через него.
etcd
Распределённое хранилище состояния кластера. Потерял etcd — потерял всё.
Scheduler
Решает, на какой ноде запустить под с учётом ресурсов и ограничений.
Controller Manager
Следит за состоянием: если упал под — поднимает новый.
Kubelet
Агент на ноде. Получает инструкции от API Server и запускает поды.
Kube Proxy
Управляет сетевыми правилами. Обеспечивает связность между подами.
Компонент Cloud Controller Manager — это мост между кластером и облачным провайдером (AWS, GCP, Azure). Он умеет автоматически создавать Load Balancer или Persistent Volume прямо через API облака.
Жизнь пода: от kubectl до запущенного контейнера
Когда вы пишете kubectl apply -f deployment.yaml, запрос идёт в API Server. Тот сохраняет желаемое состояние в etcd. Scheduler видит, что есть неназначенный под, и выбирает ноду. Kubelet на этой ноде получает задание и передаёт его в CRI — Container Runtime Interface. CRI запускает контейнер. Kube Proxy прописывает сетевые правила. Всё — под живёт.
CRI — это абстракция над движком контейнеров. K8s не зависит от Docker: можно использовать containerd, CRI-O или любой другой совместимый рантайм. С версии 1.24 поддержка dockershim удалена из ядра Kubernetes.
Почему такая архитектура и почему она работает
Разделение на Control Plane и Worker Nodes — не прихоть. Это позволяет масштабировать вычислительную мощность (добавлять ноды), не трогая управляющую логику. API Server как единая точка входа убирает прямые зависимости между компонентами. etcd как источник истины гарантирует консистентность — любой компонент, упав и перезапустившись, читает актуальное состояние.
Kubernetes — это не «Docker на стероидах». Это операционная система для датацентра. И как любая ОС, она сложна снаружи ровно настолько, насколько элегантна внутри.
Нужен продукт под ключ?
Обсудим задачу за 30 минут — roadmap и ориентир по срокам и бюджету.
Обсудить проект