Puoi configurare il tuo pod con un periodo di grazia (ad esempio 30 secondi o più, a seconda del tempo di avvio del contenitore e delle dimensioni dell'immagine) e impostare "imagePullPolicy: "Always"
. E usa kubectl delete pod pod_name
. Verrà creato un nuovo contenitore e verrà scaricata automaticamente l'ultima immagine, quindi il vecchio contenitore verrà chiuso.
Esempio:
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my_container
image: my_image:latest
imagePullPolicy: "Always"
Attualmente sto utilizzando Jenkins per build automatizzate e tag di immagini e assomiglia a questo:
kubectl --user="kube-user" --server="https://kubemaster.example.com" --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"
Un altro trucco è eseguire inizialmente:
kubectl set image deployment/my-deployment mycontainer=myimage:latest
e poi:
kubectl set image deployment/my-deployment mycontainer=myimage
In realtà attiverà l'aggiornamento continuo, ma assicurati di aver imagePullPolicy: "Always"
impostato anche .
Aggiornare:
un altro trucco che ho trovato, in cui non devi cambiare il nome dell'immagine, è cambiare il valore di un campo che attiverà un aggiornamento continuo, come terminationGracePeriodSeconds
. È possibile farlo utilizzando kubectl edit deployment your_deployment
o kubectl apply -f your_deployment.yaml
oppure utilizzando una patch in questo modo:
kubectl patch deployment your_deployment -p \
'{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
Assicurati solo di cambiare sempre il valore del numero.