# Mise à jour des images par roulement (Rolling Updates) : AVEC imageS askcarter/hello:1.0.0 puis askcarter/hello:2.0.0 (pèsent 13,3 Mo) kubectl run essai --image=askcarter/hello:1.0.0 --replicas=6 kubectl get po -o wide kubectl get po -o wide --sort-by=.spec.nodeName kubectl describe po -l run=essai | grep -e ^Name: -e Image: kubectl get pods --selector=run=essai -o wide -o custom-columns='Pod':'.metadata.name','Image':'.spec.containers[0].image' # plus "propre" que la ligne ci-dessus DANS UN AUTRE TERMINAL : watch -n 1 kubectl get pods --selector=run=essai -o wide -o custom-columns='Pod':'.metadata.name','Image':'.spec.containers[0].image' DANS LE PREMIER TERMINAL : kubectl set image deployment/essai essai=askcarter/hello:2.0.0 # la seconde occurence de essai désigne un conteneur # il est possible de changer les images de plusieurs conteneurs en une seule commande ct1=imgX ct2=imgY # il est même possible d'utiliser un caractère joker pour désigner l'ensemble des conteneurs (voir plus bas) kubectl rollout status deploy/essai kubectl rollout undo deployment essai # retour à la version précédente VARIANTE (JUSTE SUR LA VISUALISATION DES CHANGEMENTS) [ avec tmux avec 2 panneaux côte à côte avec Ctrl-B % ] : panneau 1 : kubectl get pods -w --selector=run=essai -o wide -o custom-columns='Nom':'.metadata.name','Ige':'.spec.containers[0].image' # noter ajout option -w panneau 2 : kubectl set image deployment/essai essai=askcarter/hello:2.0.0 && kubectl rollout status -w deploy/essai # noter là aussi ajout option -w kubectl rollout undo deployment essai && \ kubectl rollout status -w deploy/essai && \ kubectl get pods -w --selector=run=essai -o wide -o custom-columns='Nom':'.metadata.name','Image':'.spec.containers[0].image' kubectl set image deployment/essai *=askcarter/hello:2.0.0 && \ # NOTER emploi du "wildcard" * watch -n 1 kubectl get pods --selector=run=essai -o wide -o custom-columns='Nom':'.metadata.name','Image':'.spec.containers[0].image' # Mise à jour des images par roulement (Rolling Updates) : kubectl get deploy,pods kubectl describe pods | grep Image: curl $(minikube ip):$NODE_PORT # pour rappel : Hello Kubernetes bootcamp! | Running on: premier-essai-5f8f8c84d4-nx9tg | v=1 kubectl set image deployments/premier-essai premier-essai=jocatalin/kubernetes-bootcamp:v2 curl $(minikube ip):$NODE_PORT # À relancer autant de fois que nécessaire jusqu'à ce que l'ensemble de pods soient remplacés (nouveaux identifiants) ET que v=1 soit totalement remplacé par v=2 kubectl get pods # Pour constater les nouveaux identifiants ET les durées de fonctionnement (forcément plus courtes) kubectl describe pods | grep Image: # normallement nouvelle image pour les pods du deployment "premier-essai" kubectl rollout status deploy/premier-essai # Moyen moins empirique (plus scientifique/méthodique) de s'assurer que tout s'est bien déroulé, # devrait retourner : deployment "premier-essai" successfully rolled out ## Pour faire "marche arrière", revenir à la version précédente (Rollback an update) : kubectl set image deploy/premier-essai premier-essai=gcr.io/google-samples/kubernetes-bootcamp:v10 # tentative de basculement sur une nouvelle image kubectl get deploy # quelque chose cloche kubectl get pods # c'est confirmé (en fait l'image kubernetes-bootcamp:v10 N'existe PAS) kubectl rollout undo deployments/premier-essai # retour au dernier état stable (jocatalin/kubernetes-bootcamp:v2) kubectl get deploy,pods ; kubectl describe pods | grep Image: # vérification # ATTENTION : le rollout undo est de type undo/redo ET NON de type undo multiple ! # il suffit de lancer la commande kubectl rollout undo deployments/premier-essai # plusieurs fois d'affilé (en exécutant entre chaque des kubectl get deploy,pods et autres kubectl describe pods | grep Image: # pour s'en convaincre.