Dans cet exercice, vous allez créer un Deployment, le mettre à jour, puis effectuer un rollback pour revenir à la version précédente.
1. Création d’un Deployment
A l’aide de la commande kubectl create
, créez un Deployment
- nommé www
- définissant un Pod basé sur l’image nginx:1.16
Note: la commande kubectl create
fait partie des commandes dites impératives, elle permet de créer un Deployment sans passer par un fichier de spécification en yaml. Cette approche permet d’aller vite, elle est a utiliser dans un contexte de développement ou de debugging. La commande kubectl create
permet de spécifier le nombre de réplicas à la création d’un Deployment (via l’option –replicas), par défaut un seul réplica de Pod sera créé.
2. Scaling
Changez ce nombre de replicas de façon à en avoir 3.
Note: pour cela vous pourrez avoir besoin de la commande $ kubectl scale ...
. L’aide en ligne $ kubectl scale --help
donne quelques exemples d’utilisation.
3. Liste des ressources
Listez les ressources créées par la commande précédente (Deployment, ReplicaSet, Pod).
4. Mise à jour de l’image
Mettez l’image nginx à jour avec le version nginx:1.16-alpine
Note: spécifiez l’option –record afin de conserver l’historique de la mise à jour
5. Liste des ressources
Une nouvelle fois, listez les ressources.
Que constatez vous ?
6. Historique des mises à jour
Listez les mises à jour (= révisions) du Deployment.
Note: utilisez la commande kubectl rollout...
7. Effectuez un rollback
Faites un rollback et vérifier que le Deployment est maintenant basé sur la version précédente de l’image (nginx:1.16)
8. Cleanup
Supprimez le Deployment www
Solution
1. Création d’un Deployment
Le Deployment peut être créé avec la commande suivante:
kubectl create deploy www --image nginx:1.16
2. Scaling
La commande suivante permet de modifier le nombre de réplicas du Deployment
kubectl scale deploy/www --replicas 3
3. Liste des ressources
La commande suivante permet de lister les Deployment, ReplicaSet et Pod.
On utilise les raccourcis suivants:
- Deployment => deploy
- ReplicaSet => rs
- Pod => po
$ kubectl get deploy,rs,pod
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/www 3/3 3 3 20s
NAME DESIRED CURRENT READY AGE
replicaset.apps/www-84b9d66d8d 3 3 3 20s
NAME READY STATUS RESTARTS AGE
pod/www-84b9d66d8d-5d8wk 1/1 Running 0 20s
pod/www-84b9d66d8d-966ks 1/1 Running 0 15s
pod/www-84b9d66d8d-crf87 1/1 Running 0 15s
Les commandes de la première question ont créé:
- 1 Deployment
- 1 ReplicaSet
- 3 Pods
Le ReplicaSet assure que les 3 Pods sont actifs.
4. Mise à jour de l’image
La commande suivante permet de mettre à jour l’image avec la version nginx:1.16-alpine.
kubectl set image deploy/www nginx=nginx:1.16-alpine --record
Note: lorsque nous avons créé le Deployment avec la commande kubectl create deploy
, nous n’avons pas utilisé de spécification détaillée et n’avons donc pas donné de nom au container du Pod. Cependant, le nom nginx a automatiquement été utilisé pour le nom du container, celui-ci provient de l’image utilisée. C’est donc le nom de ce container qui est utilisé dans la partie nginx=nginx:1.16
de la commande ci dessus.
5. Liste des ressources
Nous utilisons la même commande que dans la question 2:
$ kubectl get deploy,rs,pod
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/www 3/3 3 3 79s
NAME DESIRED CURRENT READY AGE
replicaset.apps/www-5fd6c8cc68 3 3 3 38s
replicaset.apps/www-84b9d66d8d 0 0 0 80s
NAME READY STATUS RESTARTS AGE
pod/www-5fd6c8cc68-7csqg 1/1 Running 0 32s
pod/www-5fd6c8cc68-d6jtc 1/1 Running 0 38s
pod/www-5fd6c8cc68-j9hmn 1/1 Running 0 35s
Nous pouvons voir ici qu’il y a maintenant 2 ReplicaSet:
- un pour la gestion des Pods utilisant l’image nginx:1.16. Celui-ci n’est plus actif, comme le montre la valeur 0 des champs DESIRED, CURRENT et READY relatifs aux Pods gérés par le ReplicaSet
- un second qui a été créé lors de la mise à jour de l’image, il gère 3 Pods, chacun ayant un container basé sur l’image nginx:1.16-alpine
6. Historique des mises à jour
La commande suivante permet de voir la commande associée à la mise à jour du Deployment:
$ kubectl rollout history deploy/www
deployment.apps/www
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image deploy/www nginx=nginx:1.16-alpine --record=true
7. Rollback
La commande suivante permet de faire un rollback et donc de revenir à un Pod basé sur l’image nginx:1.16
kubectl rollout undo deploy/www
On peut alors vérifier la version de l’image qui est utilisée dans la spécification du Deployment:
$ kubectl get deploy/www -o jsonpath='{.spec.template.spec.containers[0].image}'
nginx:1.16
8. Cleanup
Le Deployment et les ressources associées (ReplicaSet et Pods) peuvent être supprimées avec la commande suivante:
kubectl delete deploy www