kubeadm
создает сертификаты для плоскости управления Kubernetes, действительные в течение одного года. Они будут обновляться при каждом обновлении Kubernetes . Поскольку определенно рекомендуется обновлять кластер Kubernetes хотя бы раз в год, это должно привести к тому, что сертификаты никогда не истекают.
Однако у нас есть некоторые кластеры Kubernetes, работающие в среде с воздушным зазором (абсолютно без подключения к Интернету), где есть нет гарантии, что они когда-либо увидят обновления. Сертификаты, срок действия которых истекает в течение одного года, в таких условиях неприемлемы. Продление срока действия сертификата было бы одной из идей для исправления этой настройки, но автоматическое продление сертификатов кажется лучшим решением. Это легко сделать с помощью альфа-сертификатов kubeadm, обновить все
(Kubernetes 1.15), запущенные cron или таймером systemd на каждом главном узле.
Я заметил, что сервер API, диспетчер контроллеров и планировщик выполняют не забирать новые сертификаты. Есть ли способ уведомить эти компоненты о новых сертификатах? Даже уничтожить модули не так просто, потому что модули уровня управления статичны, а kubectl delete pod
просто удаляет зеркальный модуль , но не уничтожает контейнеры. Некоторый подверженный ошибкам docker | grep…
мог бы выполнить эту работу, но мне интересно, есть ли вызов API или более разумный способ сделать это. Я не нашел других документов по этой теме.
Я думал, что существовал билет для такого поведения , но я смог найти только один для kubelet и kube-proxy
Вкратце, до тех пор, пока это поведение было "TBD", я не ожидал, что это будет исправлено в ближайшее время будущее. Если ваш кластер представляет собой конфигурацию высокой доступности с несколькими мастерами, я бы ожидал, что будет безопасно перезапускать модули уровня управления в непрерывном режиме. Процесс, который запускает kubeadm alphacerts, обновить все
, может перезапустить машину, чтобы выйти из бизнеса по выборочному возврату отдельных докер-контейнеров.
Сказав это, я бы не сказал, что идентификация док-контейнеров плоскости управления «подвержена ошибкам», поскольку kubelet маркирует докер-контейнеры метками , которые соответствуют имени модуля и пространству имен. , позволяя тривиально фильтровать контейнеры, составляющие плоскость управления, и уничтожать только их:
for comp_name in kube-apiserver kube-controller-manager etcetc; do
for c_id in $(docker ps -q \
--filter "label=io.kubernetes.pod.namespace=kube-system" \
--filter "label=io.kubernetes.pod.name=${comp_name}"); do
docker kill $c_id
docker rm $c_id
done
done