Подтвердить что ты не робот

Обновление секретов кубернетов не обновляет запущенные контейнеры env vars

Currenly при обновлении файла kubernetes secrets, чтобы применить изменения, мне нужно запустить kubectl apply -f my-secrets.yaml. Если бы существовал запущенный контейнер, он все равно использовал бы старые секреты. Чтобы применить новые секреты к запущенному контейнеру, в настоящее время я запускаю команду kubectl replace -f my-pod.yaml. Мне было интересно, если это лучший способ обновить исполняемый контейнерный секрет, или я что-то пропустил.

Спасибо.

4b9b3361

Ответ 1

Секретные документы для пользователей говорят об этом:

Установленные секреты обновляются автоматически Когда секрет, уже потребляемый в томе, обновляется, проецируемые клавиши также в конечном итоге обновляются. Время обновления зависит от периода синхронизации kubelet.

Обновлены монтированные секреты. Вопрос в том, когда. В случае обновления содержимого секретности это не означает, что ваше приложение автоматически его потребляет. Задача вашего приложения - следить за изменениями файлов в этом сценарии, чтобы действовать соответствующим образом. Имея это в виду, вам нужно сделать немного больше работы. Один из способов, который я имею в виду сейчас, - запустить запланированное задание в Kubernetes, в котором говорится о применении API Kubernetes для запуска нового развертывания deployment. Таким образом, вы могли бы теоретически достичь того, что хотите обновить свои секреты. Это как-то не изящно, но это единственный способ, который я имею в виду на данный момент. Мне по-прежнему нужно больше узнать о концепции Кубернете. Поэтому, пожалуйста, медведь со мной.

Ответ 2

Предполагая, что у нас есть pod mypod [установлен секрет как mysecret в спецификации pod]

Мы можем удалить существующий секрет

kubectl delete secret mysecret

воссоздать тот же секрет с обновленным файлом

kubectl create secret mysecret <updated file/s>

то do

kubectl apply -f ./mypod.yaml

проверьте секреты внутри mypod, он будет обновлен.

Ответ 3

Для версий K8> v1.15: kubectl rollout restart deployment $deploymentname: это будет   поэтапный перезапуск стручков без простоев.

Ответ 4

На случай, если кто-нибудь (как я) захочет принудительно обновить модули, использующие эти секреты. Из этой проблемы, задача в том, чтобы обновить переменную Env внутри контейнера, тогда k8s автоматически обновит целые модули.

kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"mycontainer","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'

Ответ 5

По дизайну Кубернетес не будет вызывать секретные обновления для запуска Pods. Если вы хотите обновить секретное значение для Pod, вам необходимо уничтожить и воссоздать Pod. Вы можете больше узнать об этом здесь.