Skip to main content

Kubernetes: 18. Rollout and Rollback

Deployment

  • When a deployment is created, it triggers a rollout
  • Rollout creates a new revision (version)
  • In the future when new deployment is created,  a new rollout is created
  • The new rollout creates one more "new" version
  • These versions help to keep track of the changes and rollback if necessary
Deployment Strategy
  • First strategy is delete and recreate strategy. 
  • Delete all the existing pods and deploy the new updated pods
  • But this comes with application downtime
  • Second strategy and default strategy is Rolling update strategy
  • Kubernetes deletes one pod at a time in the older version and in its place creates a one pod at a time in the newer version
Update Strategy
  • Updates can be many things like updating the labels, docker image, replicas etc
  • These are directly updated into the deployment file and the changes are applied
  • When the changes are applied using kubectl apply command, a new rollout and a new revision is created
  • Another way to update the image name is to use the kubectl set image command. This will update the image name in the deployment. [CHECK THIS]
  • Using kubectl describe deployment on the recreate and rollout upgrade strategy gives insight about the deployment strategy
  • For recreate we can see that kubernetes creates the new replicaset, sets the old replicaset to zero
  • For rollout upgrade we can see that kubernetes decrements one replica at a time in old replicaset and increments one replica at a time in the new replicaset
  • At the end of the rollout the first replicaset will have 0 pods and the new replicaset have the desired pods
  • Now when we undo a rollback of deployment kubernetes sets replicas to 0 in the new replicaset and the desired number in the older replica set
  • At the end of the undo rollout the first replicaset will have desired pods and the new replicaset have the 0 pods

kubectl create -f <deployment-file>.yaml
-> Create a new deployment

kubectl get -f <deployment-file>.yaml
-> Get the status of the deployment

kubectl apply -f <deployment-definition>.yaml
-> Apply the new changes in the deployment file

kubectl rollout status deployment/<deployment-name> -n <namespace>
-> Get the rollout status of the deployment

kubectl rollout history deployment/<deployment-name> -n <namespace>
-> Get the rollout history of the deployment

kubectl set image deployment/<deployment-name> <container-name>=<new-image> -n <namespace>
-> Update the image name in the deployment file

kubectl get replicaset -n <namespace>
-> Gets the replicaset for the old and new deployments

kubectl rollout undo deployment/<deployment-name> -n <namespace>
-> Rollback the latest deployment


Comments