Ответ
Kubernetes как система состоит из нескольких основных исполняемых компонентов, которые развертываются на master- и worker-нодах.
На control-plane (master-нодах):
kube-apiserver: Это фронтенд кластера. Все взаимодействия (черезkubectl, dashboard, другие компоненты) проходят через его REST API. Я настраивал его с флагами для определения диапазонов сетей pod/service и включения admission controllers.kube-controller-manager: Запускает контроллеры, которые следят за состоянием кластера. Например, Node Controller реагирует на падение нод, а Replication Controller поддерживает нужное количество подов в ReplicaSet. В продакшене я настраиваю для него высокую доступность.kube-scheduler: Отвечает за размещение новых подов на нодах. Он оценивает ресурсы (CPU, memory) и правила (affinity/anti-affinity), которые я задаю в манифестах, чтобы выбрать лучшую ноду.etcd: Хотя это не часть бинарных файлов k8s, это критически важный внешний компонент. В нем хранится вся конфигурация и состояние кластера. Я разворачивал его кластер отдельно с TLS-аутентификацией и регулярным бэкапированием.
На worker-нодах:
kubelet: Основной агент на каждой ноде. Он получает спецификации подов от API-сервера и обеспечивает, чтобы описанные в них контейнеры были запущены и здоровы. При развертывании я передаю ему kubeconfig для аутентификации в кластере.kubelet --kubeconfig=/var/lib/kubelet/kubeconfig --config=/var/lib/kubelet/config.yamlkube-proxy: Отвечает за сетевую коммуникацию. Он поддерживает правила iptables или IPVS, которые обеспечивают доступ к сервисам (типа ClusterIP, NodePort) изнутри кластера. Я выбирал режимipvsдля лучшей производительности на больших кластерах.
Клиентский инструмент:
kubectl: CLI для управления кластером. Не является частью серверных компонентов, но это основной инструмент для взаимодействия с API-сервером.
При установке (например, с помощью kubeadm) эти бинарные файлы запускаются как системные демоны (systemd services) на соответствующих нодах.