Статические поды в Kubernetes: что это, зачем и как использовать

В Kubernetes большинство подов управляются контроллерами (Deployment, DaemonSet) через API-сервер. Однако существуют статические поды — они управляются напрямую через kubelet и не зависят от управляющих компонентов кластера.

Зачем использовать статические поды

  • Для запуска системных компонентов на узле (например, мониторинга или логгирования).
  • Когда нужен под, работающий независимо от control plane.
  • При инициализации собственного кластера Kubernetes (например, для запуска etcd).

Основные особенности

  • Управляются только kubelet.
  • Не отображаются через kubectl, если не синхронизируются с API-сервером.
  • Задаются YAML-манифестом в специальной директории.

Как создать статический под

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

Убедитесь, что параметр --pod-manifest-path указан в конфигурации или systemd-сервисе kubelet:

--pod-manifest-path=/etc/kubernetes/manifests

Перезапустите kubelet.

2. Создание манифеста пода

Пример файла nginx-static.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-static
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80

Сохраните его в директорию /etc/kubernetes/manifests. Kubelet подхватит его автоматически.

3. Проверка статуса

crictl ps -a

Просмотр логов:

crictl logs <container-id>

Если отображается через API:

kubectl get pods -A | grep nginx-static

Ограничения

  • Нет лейблов/селекторов — нельзя использовать Service/Deployment.
  • Не управляются через API — отсутствуют lifecycle-хуки, rolling update.
  • Привязка к конкретному узлу, сложно масштабировать.

Когда использовать

  • Для запуска etcd и компонентов control plane на старте.
  • Для запуска агентов мониторинга.
  • На bare-metal системах с минимальной зависимостью от API.

Заключение

Статические поды — мощный, но нишевый инструмент Kubernetes. Они обеспечивают надежность и независимость, полезную при настройке критических компонентов или создании собственного кластера.