Vous pouvez configurer votre pod avec une période de grâce (par exemple, 30 secondes ou plus, en fonction de conteneur de temps de démarrage et de la taille de l'image) et définissez "imagePullPolicy: "Always"
. Et utiliser kubectl delete pod pod_name
.
Un nouveau conteneur sera créé et la dernière image automatiquement téléchargé, puis le vieux conteneur résilié.
Exemple:
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my_container
image: my_image:latest
imagePullPolicy: "Always"
Je suis actuellement à l'aide de Jenkins pour les générations automatisées et le balisage d'image et il ressemble à quelque chose comme 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 est d'abord exécuter:
kubectl set image deployment/my-deployment mycontainer=myimage:latest
et puis:
kubectl set image deployment/my-deployment mycontainer=myimage
Il sera effectivement le déclenchement de la rolling-mise à jour, mais assurez-vous d'avoir également imagePullPolicy: "Always"
ensemble.
Mise à jour:
un autre truc que j'ai trouvé, où vous n'avez pas à changer le nom de l'image, est de changer la valeur d'un champ qui va déclencher un roulement de mise à jour, comme terminationGracePeriodSeconds
. Vous pouvez faire cela en utilisant kubectl edit deployment your_deployment
ou kubectl apply -f your_deployment.yaml
ou à l'aide d'un patch comme ça:
kubectl patch deployment your_deployment -p \
'{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
Assurez-vous de toujours changer la valeur numérique.