Ответ
Минимальный рабочий кластер Kubernetes состоит из двух типов нод и набора системных компонентов. Я разворачивал такие кластеры с помощью kubeadm и через managed-сервисы (GKE/EKS).
1. Control Plane (Master Node): Управляющая плоскость. На продакшене ее компоненты часто разнесены по нескольким нодам для отказоустойчивости.
- kube-apiserver: Фронтенд кластера. Все запросы (kubectl, dashboard, ноды) идут через него. Мы настраивали балансировку и TLS для него.
- etcd: Высокодоступное key-value хранилище, где хранится ВЕСЬ состояние кластера (поды, конфиги, секреты). Критически важный компонент, требует надежного бэкапа.
- kube-scheduler: Отвечает за выбор ноды, на которой будет запущен под. Принимает решение на основе ресурсов, политик, affinity/anti-affinity правил.
- kube-controller-manager: Запускает контроллеры, которые следят за желаемым состоянием (например, если под упал, ReplicaController создаст новый).
2. Worker Nodes: Ноды, на которых работают пользовательские приложения.
- kubelet: Агент на ноде. Он общается с API-сервером и управляет жизненным циклом подов (запуск/остановка через container runtime).
- kube-proxy: Отвечает за сетевые правила. Реализует абстракцию Service (ClusterIP, NodePort), управляя iptables или ipvs правилами для маршрутизации трафика к подам.
- Container Runtime: Софт, который запускает контейнеры (containerd, CRI-O). Docker сейчас deprecated в пользу containerd.
3. Сетевые компоненты (CNI - Container Network Interface):
- Сетевой плагин: Обязательный компонент. Обеспечивает сетевое взаимодействие между подами на разных нодах. Я чаще всего использовал Calico (с политиками сетевой безопасности NetworkPolicy) или Cilium. Без него поды не смогут "видеть" друг друга.
- CoreDNS: Системный сервис для разрешения имен внутри кластера (например,
my-service.my-namespace.svc.cluster.local).
Минимальная команда для инициализации (kubeadm):
# Инициализация control-plane ноды
kubeadm init --pod-network-cidr=192.168.0.0/16
# Установка сетевого плагина (пример для Calico)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Без установленного CNI плагина системные поды coredns останутся в статусе Pending.