Task:
There is a production deployment planned for next week. The Nautilus DevOps team wants to test the deployment update and rollback on Dev environment first so that they can identify the risks in advance. Below you can find more details about the plan they want to execute.
Create a namespace devops. Create a deployment called httpd-deploy under this new namespace, It should have one container called httpd, use httpd:2.4.27 image and 6 replicas. The deployment should use RollingUpdate strategy with maxSurge=1, and maxUnavailable=2.
Next upgrade the deployment to version httpd:2.4.43 using a rolling update.
Finally, once all pods are updated undo the update and roll back to the previous/original version.
Note: The kubectl utility on jump_host has been configured to work with the kubernetes cluster.
There is a production deployment planned for next week. The Nautilus DevOps team wants to test the deployment update and rollback on Dev environment first so that they can identify the risks in advance. Below you can find more details about the plan they want to execute.
Create a namespace devops. Create a deployment called httpd-deploy under this new namespace, It should have one container called httpd, use httpd:2.4.27 image and 6 replicas. The deployment should use RollingUpdate strategy with maxSurge=1, and maxUnavailable=2.
Next upgrade the deployment to version httpd:2.4.43 using a rolling update.
Finally, once all pods are updated undo the update and roll back to the previous/original version.
Note: The kubectl utility on jump_host has been configured to work with the kubernetes cluster.
Step 1) Create a Name Space
thor@jump_host /$ kubectl create namespace devops
namespace/devops created
Step 2) Create a deployment called httpd-deploy under this new namespace, It should have one container called httpd, use httpd:2.4.27 image and 6 replicas. The deployment should use RollingUpdate strategy with maxSurge=1, and maxUnavailable=2.
thor@jump_host ~$ cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd-deploy
namespace: devops
spec:
replicas: 6
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 2
selector:
matchLabels:
app: devops
template:
metadata:
labels:
app: devops
spec:
containers:
- image: httpd:2.4.27
name: httpd
Step 3) Apply the changes
thor@jump_host ~$ kubectl apply -f deploy.yaml
deployment.apps/httpd-deploy created
Step 4) Validate the deployment version
thor@jump_host ~$ kubectl get deployments --namespace=devops -o wide
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
devops httpd-deploy 6/6 6 6 23s httpd httpd:2.4.27 app=devops
Step 5) Check the deployment Revision
kubectl rollout history deployment/httpd-deploy --namespace=devops
deployment.apps/httpd-deploy
REVISION CHANGE-CAUSE
1 <none>
Step 6) Upgrade the deployment to version httpd:2.4.43 using a rolling update.
thor@jump_host ~$ kubectl set image deployment/httpd-deploy httpd=httpd:2.4.43 --namespace=devops --record=true
deployment.apps/httpd-deploy image updated
Step 7) Validate the deployment
thor@jump_host ~$ kubectl get deployments --namespace=devops -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
httpd-deploy 6/6 6 6 114s httpd httpd:2.4.43 app=devops
Step 8) Undo the update and roll back to the previous/original version
thor@jump_host ~$ kubectl rollout undo deployment/httpd-deploy --to-revision=1 --namespace=devops
deployment.apps/httpd-deploy rolled back
Step 9) Validate the deployment version
thor@jump_host ~$ kubectl get deployments --namespace=devops -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
httpd-deploy 6/6 6 6 2m53s httpd httpd:2.4.27 app=devops
No comments:
Post a Comment