Какие компоненты в Kubernetes запускают поды на узле и отвечают за сетевую коммуникацию?

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

Ответ

В архитектуре узла (Node) Kubernetes за эти задачи отвечают две ключевые системные компоненты (агенты):

  1. kubeletзапускает и управляет подами на узле.

    • Это основной агент узла, который работает на каждой ноде кластера.
    • Его задачи:
      • Получение спецификации Pod (манифеста) от API-сервера.
      • Управление жизненным циклом контейнеров Pod (запуск, остановка, перезапуск) через Container Runtime Interface (CRI), например, containerd или CRI-O.
      • Отчет о состоянии Pod и узла обратно в API-сервер.
      • Выполнение probes (liveness, readiness).
  2. kube-proxyотвечает за сетевое взаимодействие Pod'ов и Service'ов.

    • Это сетевой прокси, работающий на каждом узле.
    • Его задачи:
      • Поддержка абстракции Service: когда создается Service, kube-proxy настраивает правила (через iptables, ipvs или nftables) для маршрутизации трафика с виртуального IP-адреса Service на IP-адреса реальных Pod'ов.
      • Обеспечение балансировки нагрузки между Pod'ами одного Service.

Практическая проверка:

# Посмотреть статус этих системных Pod'ов в пространстве имен kube-system
kubectl get pods -n kube-system -l component=kubelet
kubectl get pods -n kube-system -l component=kube-proxy

# Проверить логи kubelet на конкретном узле (если есть доступ по SSH)
sudo journalctl -u kubelet -f