Какие ключевые бинарные файлы (компоненты) составляют Kubernetes?

«Какие ключевые бинарные файлы (компоненты) составляют Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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.yaml
  • kube-proxy: Отвечает за сетевую коммуникацию. Он поддерживает правила iptables или IPVS, которые обеспечивают доступ к сервисам (типа ClusterIP, NodePort) изнутри кластера. Я выбирал режим ipvs для лучшей производительности на больших кластерах.

Клиентский инструмент:

  • kubectl: CLI для управления кластером. Не является частью серверных компонентов, но это основной инструмент для взаимодействия с API-сервером.

При установке (например, с помощью kubeadm) эти бинарные файлы запускаются как системные демоны (systemd services) на соответствующих нодах.