Ответ
В кластере Kubernetes узлы делятся на две основные роли, которые я администрировал.
1. Control Plane Node (Master Node) Это мозг кластера. На моих стендах он включает следующие компоненты:
- kube-apiserver: Фронтенд кластера, через который я взаимодействую (через
kubectlили API). - etcd: Распределенное key-value хранилище для всех данных кластера (состояния подов, конфиги). Обеспечивал его бэкапы.
- kube-scheduler: Принимает решение, на каком worker node запустить под.
- kube-controller-manager: Запускает контроллеры, которые следят за состоянием кластера (например, контроллер репликаций).
2. Worker Node На этих узлах запускаются рабочие нагрузки (поды). Каждый worker node, который я настраивал, состоит из:
- kubelet: Агент, который получает спецификации подов от API-сервера и гарантирует, что контейнеры в них запущены и здоровы.
- kube-proxy: Реализует концепцию Service, поддерживая сетевые правила для маршрутизации трафика к подам.
- Container Runtime: Обычно это containerd или CRI-O. Раньше использовался Docker, но сейчас стандартом является совместимая с CRI (Container Runtime Interface) реализация.
На практике, особенно в managed-сервисах вроде EKS или GKE, мастер-ноды управляются провайдером, а я работаю в основном с пулами worker-нод, масштабируя их под нагрузку и настраивая taints/tolerations для специфичных рабочих нагрузок.