web-dev-qa-db-fra.com

La mise à jour des secrets de kubernetes ne met pas à jour les vars env de conteneurs en cours d'exécution

Actuellement, lors de la mise à jour d'un fichier secret kubernetes, pour appliquer les modifications, je dois exécuter kubectl apply -f my-secrets.yaml. S'il y avait un conteneur en cours d'exécution, il utiliserait toujours les anciens secrets. Afin d'appliquer les nouveaux secrets sur le conteneur en cours d'exécution, j'exécute actuellement la commande kubectl replace -f my-pod.yaml. Je me demandais si c'était la meilleure façon de mettre à jour un secret de conteneur en cours d'exécution, ou est-ce que je manque quelque chose.

Merci.

13
OmriToptix

Les documents secrets pour les utilisateurs dites ceci:

Les secrets montés sont mis à jour automatiquement Lorsqu'un secret déjà consommé dans un volume est mis à jour, les clés projetées sont finalement mises à jour également. Le temps de mise à jour dépend de la période de synchronisation du kubelet.

Les secrets montés sont mis à jour. La question est de savoir quand. Dans le cas où le contenu d'un secret est mis à jour, cela ne signifie pas que votre application le consomme automatiquement. Il incombe à votre application de surveiller les modifications de fichiers dans ce scénario pour agir en conséquence. Dans cet esprit, vous devez actuellement faire un peu plus de travail. Une façon dont j'ai à l'esprit en ce moment serait d'exécuter un travail planifié dans Kubernetes qui parle à l'API Kubernetes pour lancer un nouveau déploiement de votre déploiement . De cette façon, vous pourriez théoriquement réaliser ce que vous voulez renouveler vos secrets. Ce n'est en quelque sorte pas élégant, mais c'est la seule façon dont je pense à l'heure actuelle. J'ai encore besoin de vérifier moi-même les concepts de Kubernetes. Restez avec moi.

14
xh3b4sd

En supposant que nous avons exécuté pod mypod [monté secret comme mysecret dans pod spec]

Nous pouvons supprimer le secret existant

kubectl delete secret mysecret

recréer le même secret avec le fichier mis à jour

kubectl create secret mysecret <updated file/s>

alors fais

kubectl apply -f ./mypod.yaml

vérifiez les secrets à l'intérieur de mypod, il sera mis à jour.

9
sangeeta maurya

Pour les versions k8s> v1.15: kubectl rollout restart deployment $deploymentname: cela redémarrera les pods progressivement sans provoquer de temps d'arrêt.

2
victortv

Au cas où quelqu'un (comme moi) voudrait forcer les pods de mise à jour roulants qui utilisent ces secrets. À partir de cela problème , l'astuce consiste à mettre à jour une variable Env à l'intérieur du conteneur, puis k8s lancera automatiquement la mise à jour de pods entiers

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

De par sa conception, Kubernetes ne diffusera pas les mises à jour secrètes des pods en cours d'exécution. Si vous souhaitez mettre à jour la valeur secrète d'un pod, vous devez détruire et recréer le pod. Vous pouvez en savoir plus ici .

0
Thomas Mullaly