Skip to content

Как работает kubelet в Windows Node?

Kubelet — это ключевой компонент Kubernetes, отвечающий за управление подами и контейнерами на узле (Node). Он работает на каждой ноде кластера, включая Windows-ноды, и обеспечивает взаимодействие между нодой и API-сервером Kubernetes.

Работа kubelet в Windows Node имеет ряд особенностей по сравнению с Linux, но основная функциональность остаётся той же. Давайте разберёмся, как он работает.


🔧 Основные задачи Kubelet

На любом узле (Linux или Windows), kubelet выполняет следующие функции: - Запускает и останавливает Pod'ы. - Следит за состоянием Pod'ов и сообщает об этом master-узлу. - Взаимодействует с CRI (Container Runtime Interface) для управления контейнерами. - Обеспечивает здоровье узла через liveness/readiness пробы. - Управляет томами (volume mounting). - Отправляет метрики и статус узла.


🖥️ Особенности работы Kubelet на Windows

1. Запуск Kubelet

  • На Windows kubelet запускается как служба Windows (Windows Service).
  • Обычно устанавливается через инструменты вроде kubeadm, kubespray или вручную.
  • Бинарник kubelet.exe доступен в официальных релизах Kubernetes:
    https://github.com/kubernetes/kubernetes/releases

Пример команды запуска:

kubelet.exe --kubeconfig=c:\k\config --hostname-override=$(hostname) --cloud-provider=external --feature-gates=...

⚠️ Обратите внимание: пути используют обратные слэши (\), а конфигурационные файлы должны быть в правильном формате.


2. Контейнерный runtime

На Windows используется Docker или containerd с поддержкой Windows Containers.

  • Docker: Поддерживался ранее, сейчас считается устаревшим в Kubernetes (deprecated).
  • containerd: Рекомендуемый вариант. Начиная с версии containerd 1.4+, есть полноценная поддержка Windows через CRI.

✅ На Windows node должен быть установлен и запущен containerd с включённым CRI-плагином.


3. Типы контейнеров

Windows поддерживает два типа изоляции контейнеров: - process isolation — легковесная изоляция (похоже на chroot). - hypervisor isolation — более безопасная, с использованием Hyper-V.

Kubelet выбирает тип на основе спецификации Pod.


4. Сетевые особенности

  • Используется CNI (Container Network Interface) плагин, совместимый с Windows (например, Flannel, Calico, Antrea).
  • На Windows CNI реализуется через WinPod и сетевые драйверы, такие как l2bridge или Overlay (VXLAN).
  • Kubelet запускает CNI-плагин для настройки сетевых интерфейсов Pod'а.

Пример: Flannel использует host-gw или vxlan режимы на Windows.


5. Поддержка образов

  • Kubelet скачивает образы через containerd/Docker.
  • Образы должны быть собраны для Windows (платформа windows/amd64).
  • Совместимость версий ОС: образ должен соответствовать версии хоста (например, Windows Server 2019, 2022).

6. Интеграция с Windows Security

  • Kubelet учитывает политики безопасности Windows.
  • Поддержка gMSA (Group Managed Service Accounts) для доменных приложений.
  • Возможность запуска Pod'ов с определёнными учётными записями (User/Group).

7. Логирование и мониторинг

  • Логи kubelet пишутся в файл (например, C:\k\logs\kubelet.log) или в журнал событий Windows (Event Log).
  • Метрики доступны через /metrics endpoint (на порту 10250).
  • Интеграция с Metrics Server, Prometheus и kube-state-metrics возможна.

8. Ограничения и отличия от Linux

Функция Linux Windows
PID Да Нет (или ограничено)
cgroups cgroups v1/v2 Job Objects (аналог)
systemd Да Нет (используются службы Windows)
init системы systemd/upstart Services + Task Scheduler
Сигналы SIGTERM, SIGKILL Через API завершения процесса
Поддержка всех CNI Полная Ограниченная (только Windows-совместимые)

🛠️ Как проверить работу Kubelet на Windows?

# Проверить статус службы
Get-Service kubelet

# Посмотреть логи
Get-Content C:\k\logs\kubelet.log -Tail 50

# Проверить, что узел в Ready состоянии
kubectl get nodes -o wide

✅ Рекомендации

  • Используйте containerd вместо Docker.
  • Убедитесь, что версии Kubernetes, containerd и ОС совместимы.
  • Настройте CNI перед запуском kubelet.
  • Используйте --windows-service флаг при необходимости (для запуска как службы).
  • Включайте необходимые feature gates, например: bash --feature-gates=WindowsHostNetwork=true