DaemonSet будет выполнять следующее:
- При помощи bash скрипта постояннo проверять наличие нужных CA сертификатов на нодах.
- В случае, если их нет, копировать их из секрета и обновлять сертификаты.
- Перезагружать containerd и dockerd.
- Отключать блокировку ноды после обновления сертификатов
DaemonSet работает с нодами, использующими Docker runtime и Containerd runtime.
Для корректной работы необходимо при создании нод группы в консоли, yc или terraform добавить taint-политики узла для блокировки ноды до окончания процесса обновления сертификатов.
Taint-политики узла: state=certificate-updater:NoSchedule
- Создать namespace для работы daemonSet-а в целях изоляции его работы:
kubectl apply -f certificate-updater-ns.yaml
- Создать простой secret с несколькими файлами внутри при помощи kubectl с указанием нескольких источников в рамках ранее созданного namespace:
kubectl create secret generic crt --from-file=num1.crt --from-file=num2.crt --from-file=num3.crt --from-file=num4.crt --from-file=num5.crt --namespace="certificate-updater"
Важно, что daemonSet ссылается на сертификат с именем crt.
- Создать service account для работы daemonSet-а для снятия блокировки нод:
kubectl apply -f certificate-updater-sa.yaml
- Создать daemonSet:
kubectl apply -f certificate-updater-ds.yaml
Далее можно отслеживать состояние daemonSet-а: в случае когда произойдет обновление сертификатов, то перезагрузятся процессы dockerd и containerd.
При помощи:
kubectl get secret crt -o yaml
Мы можем получить практически готовую для переиспользования конфигурацию. Для добавления данных в секрет как есть стоит предварительно кодировать файл при помощи команды base64 и дописывать соотвествующее содержимое в yaml и применять заново.