Static Pods, TLS и управление конфигурацией (ConfigMap)
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
- Из строки:
- Способы использования:
- Environment Variables: Загрузка данных как переменных окружения.
- 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-инженера:
- Не храните конфиги в образах: Используйте ConfigMap. Это позволит менять настройки Nginx или DB-клиентов без пересборки Docker-образа.
- Static Pods — это база: Если
kubectlне отвечает, идите на мастер-ноду в/etc/kubernetes/manifestsи проверяйте статус файлов. - Следите за сертификатами: Настройте мониторинг срока действия сертификатов (Prometheus это умеет), чтобы не проснуться с "мертвым" кластером.
- Секретные данные: Никогда не храните пароли или приватные ключи в ConfigMap. Для этого есть объект Secret (разберем в следующей теме).