Static Pods, TLS и управление конфигурацией (ConfigMap)

From wiki.baghirzade.pro
Jump to navigation Jump to search

Этот раздел объясняет, как «оживают» компоненты Control Plane и как DevOps-инженер управляет переменными окружения и файлами конфигурации.


1. Static Pods (Статичные поды)

Статичные поды — это поды, которыми управляет напрямую kubelet, а не API-сервер.

  • Где находятся: Kubelet следит за определенной директорией на хосте (обычно /etc/kubernetes/manifests).
  • Как работают: Если вы положите туда YAML-файл, kubelet сам запустит этот под. Если удалите файл — под исчезнет.
  • Применение: Именно так запускаются основные компоненты Control Plane (etcd, kube-apiserver, kube-scheduler, kube-controller-manager) при использовании kubeadm.
  • Зачем: Это позволяет запустить компоненты управления до того, как сам кластер начнет функционировать.

2. TLS-сертификаты в кластере

Все компоненты Kubernetes (API-сервер, поды, узлы) общаются между собой через mTLS (двусторонний TLS).

  • CA (Certificate Authority): Kubernetes создает свои собственные корневые сертификаты при установке.
  • Срок службы: Обычно сертификаты компонентов выпускаются на 1 год, а корневой (CA) — на 10 лет.
  • Обновление: Сертификаты нужно обновлять до истечения срока, иначе кластер "развалится" (компоненты перестанут доверять друг другу).
  • Команда для проверки: kubeadm certs check-expiration.

3. Переменные окружения (Env Vars)

Вы можете передавать настройки в контейнер прямо в манифесте пода.

  • env: Список пар name и value.
  • Применение: Передача портов, имен баз данных, настроек логирования.
  • Command & Args: В Kubernetes command заменяет ENTRYPOINT из Dockerfile, а args заменяет CMD.

4. ConfigMap (Конфигурационные карты)

ConfigMap позволяет отделить конфигурационные файлы от образа контейнера (принцип Decoupling).

  • Создание:
    • Из строки: kubectl create configmap my-config --from-literal=key=value
    • Из файла: kubectl create configmap nginx-config --from-file=nginx.conf
  • Способы использования:
    1. Environment Variables: Загрузка данных как переменных окружения.
    2. Volume Mount: Монтирование ConfigMap как файла в файловую систему пода.

5. Продвинутые приемы ConfigMap

  • SubPath: Используется при монтировании файла в директорию, где уже есть другие файлы. Без subPathмонтирование ConfigMap "сотрет" (перекроет) всё содержимое папки.
  • Обновление "на лету": Если вы монтируете ConfigMap как Volume, изменения в ConfigMap через некоторое время (до минуты) автоматически появятся внутри пода без его рестарта.
  • Immutable ConfigMaps: Можно пометить ConfigMap как immutable: true. Это защищает его от случайных изменений и снижает нагрузку на API-сервер.

6. Шпаргалка по командам (Cheat Sheet)

Задача Команда
Проверить срок сертификатов kubeadm certs check-expiration
Создать ConfigMap из файла kubectl create cm <name> --from-file=<path>
Посмотреть содержимое CM kubectl get cm <name> -o yaml
Отредактировать CM kubectl edit cm <name>
Проверить переменные в поде kubectl exec <pod> -- printenv
Посмотреть логи static пода journalctl -u kubelet (если под не стартует)

💡 Резюме для DevOps-инженера:

  1. Не храните конфиги в образах: Используйте ConfigMap. Это позволит менять настройки Nginx или DB-клиентов без пересборки Docker-образа.
  2. Static Pods — это база: Если kubectl не отвечает, идите на мастер-ноду в /etc/kubernetes/manifests и проверяйте статус файлов.
  3. Следите за сертификатами: Настройте мониторинг срока действия сертификатов (Prometheus это умеет), чтобы не проснуться с "мертвым" кластером.
  4. Секретные данные: Никогда не храните пароли или приватные ключи в ConfigMap. Для этого есть объект Secret (разберем в следующей теме).