Here is yet another interesting and useful sample question for the CKA exam. The Certified Kubernetes Administration exam is a performance-based exam, unlike other professional exams. Hence, you need to make your hands dirty by building a new Kubernetes cluster and trying all the sample questions. In UnixArena, I have shared sample questions and detailed step by step executions in previous articles. If you find any useful resources, kindly share them in the comments section.
In this article, let’s see how Kubernetes deployment does the rolling updates and rollback. From the exam point of view, you need to complete the sequence of tasks.
Sample Question:
Create a new deployment as follows:
- Name: web-app
- Nginx version – 1.11.10-alpine
- Update number of replicas to 3
- Deploy the newer version of nginx 1.11.13-alpine using rolling update
- Rollback that update to previous version 1.11.10-alpine
1. Create a new deployment file using imperative command and edit the file if required.
[root@kmaster ~]# kubectl create deploy web-app --image=nginx:1.11.10-alpine --dry-run=client -o yaml > app.yaml [root@kmaster ~]# kubectl create -f app.yaml [root@kmaster ~]# cat app.yaml apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: web-app name: web-app spec: replicas: 1 selector: matchLabels: app: web-app strategy: {} template: metadata: creationTimestamp: null labels: app: web-app spec: containers: - image: nginx:1.11.10-alpine name: nginx resources: {} status: {} [root@kmaster ~]# kubectl get deployment -R NAME READY UP-TO-DATE AVAILABLE AGE web-app 1/1 1 1 41s [root@kmaster ~]#
2. Update the number of replicas to 3. Edit the “app.yaml” file and set the replica count to 3.
[root@kmaster ~]# vi app.yaml apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: web-app name: web-app spec: replicas: 3 selector: matchLabels: app: web-app strategy: {} template: metadata: creationTimestamp: null labels: app: web-app spec: containers: - image: nginx:1.11.10-alpine name: nginx resources: {} status: {} [root@kmaster ~]# [root@kmaster ~]# kubectl apply -f app.yaml deployment.apps/web-app configured [root@kmaster ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE web-app 1/3 3 1 6m26s [root@kmaster ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE web-app 3/3 3 3 6m30s [root@kmaster ~]#
3. Update the nginx image version to the newer one.
[root@kmaster ~]# vi app.yaml apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: web-app name: web-app spec: replicas: 3 selector: matchLabels: app: web-app strategy: {} template: metadata: creationTimestamp: null labels: app: web-app spec: containers: - image: nginx:1.11.13-alpine name: nginx resources: {} status: {} [root@kmaster ~]#
4. Verify the default deployment method before pushing the update.
[root@kmaster ~]# kubectl describe deployment web-app |egrep "StrategyType|RollingUpdateStrategy" StrategyType: RollingUpdate RollingUpdateStrategy: 25% max unavailable, 25% max surge
5. Push the deployment rolling update using kubectl apply command.
[root@kmaster ~]# kubectl apply -f app.yaml deployment.apps/web-app configured
6. Validate the rolling update.
[root@kmaster ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE web-app 3/3 2 3 8m10s [root@kmaster ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE web-app 3/3 3 3 8m22s [root@kmaster ~]# [root@kmaster ~]# kubectl get po |grep web-app web-app-bff47cd8c-lzpqr 1/1 Running 0 10s web-app-bff47cd8c-qk92m 1/1 Running 0 24s web-app-bff47cd8c-w2z49 1/1 Running 0 18s web-app-fc7875d8-mr9kz 0/1 Terminating 0 2m7s [root@kmaster ~]#
7. Here is the last task. Just revert to the older version of nginx. Use “kubectl edit” command to update the image version.
[root@kmaster ~]# kubectl edit deployment web-app deployment.apps/web-app edited # Update the image version. spec: containers: - image: nginx:1.11.10-alpine [root@kmaster ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE web-app 3/3 3 3 9m29s [root@kmaster ~]# kubectl get po |grep web-app web-app-bff47cd8c-lzpqr 0/1 Terminating 0 78s web-app-fc7875d8-48trz 1/1 Running 0 11s web-app-fc7875d8-d5v5z 1/1 Running 0 12s web-app-fc7875d8-ls4fc 1/1 Running 0 14s [root@kmaster ~]#
You could also roll back using the following command.
[root@kmaster ~]# kubectl rollout undo deploy web-app deployment.apps/web-app rolled back [root@kmaster ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE web-app 3/3 3 3 24m [root@kmaster ~]# kubectl get pods |grep web-app web-app-bff47cd8c-5w589 1/1 Running 0 12s web-app-bff47cd8c-7t8bq 1/1 Running 0 11s web-app-bff47cd8c-959wx 1/1 Running 0 14s web-app-fc7875d8-48trz 0/1 Terminating 0 15m [root@kmaster ~]#
We have deployed a new application and scaled it to 3 pods. Updated the image with the new version using deployment’s rolling update. Finally, we have rolled back to the older version.
Hope this article is informative to you.
Leave a Reply