Vous pouvez configurer votre pod avec une période de grâce (par exemple 30 secondes ou plus, selon l'heure de démarrage du conteneur et la taille de l'image) et définir "imagePullPolicy: "Always"
. Et utilisez kubectl delete pod pod_name
. Un nouveau conteneur sera créé et la dernière image téléchargée automatiquement, puis l'ancien conteneur se terminera.
Exemple:
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my_container
image: my_image:latest
imagePullPolicy: "Always"
J'utilise actuellement Jenkins pour les builds automatisés et le marquage d'image et cela ressemble à ceci:
kubectl --user="kube-user" --server="https://kubemaster.example.com" --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"
Une autre astuce consiste à exécuter initialement:
kubectl set image deployment/my-deployment mycontainer=myimage:latest
puis:
kubectl set image deployment/my-deployment mycontainer=myimage
Cela déclenchera en fait la mise à jour continue, mais assurez-vous que vous avez également imagePullPolicy: "Always"
défini.
Mettre à jour:
une autre astuce que j'ai trouvée, où vous n'avez pas à changer le nom de l'image, est de changer la valeur d'un champ qui déclenchera une mise à jour progressive, comme terminationGracePeriodSeconds
. Vous pouvez le faire en utilisant kubectl edit deployment your_deployment
ou kubectl apply -f your_deployment.yaml
ou en utilisant un patch comme celui-ci:
kubectl patch deployment your_deployment -p \
'{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
Assurez-vous simplement de toujours modifier la valeur numérique.