Rolling Updates and Rollbacks in K8s
In our environment everyone has several application deployed and running successfully. Each application comes with a version and time by time application vendor releases new version of it where new version consist of new features and previous bug fixes.
Now, its become must task to update our applications to leverage new features.
So, how will be make the strategy to upgrade our applications into production environment. Its quite difficult to update all the application at once as it would hamper the stability of the environment.
In Kubernetes there is default strategy of deployment called Rolling updates where we do not destroy all the application at one, instead we bring down the application older version and bring back the new version of the application one by one. By doing this application never goes down and upgrade is seamless.
It's require to specify the upgrade strategy into the deployment. If there is no such update strategy specify then the default strategy assume by system is “Rolling update”
To view the rollout status of your application deployment
>Kubectl rollout status deployment/myapp-deployment
To view the revisions and history of the deployment
>Kubectl rollout history deployment.apps/(deployment name)
Now, if we want to update our application like its version than what’s the process….
There are 2 method to accomplish this task.
Update the image version under spec section in deployment file and then run below command.
>Kubectl apply -f (deployment file)
Another way is to use set image command from where we can change the image version of the application.
>Kubectl set image deployment.app/myapp-deployment nginx=nginx:1.9.1
However, Doing so will not change the image version into deployment.yml file. So need to be carefull to make changes of that definition file in future.
Now lets discuss the upgrade process under the hood.
When a new deployment is initiated for say 5 replica (replica set 1) of PODs. Its then create a replica set (replica set 2) automatically which is equal to the actual deployment.
When we initiate the upgrade then one POD in Replica set 1 gets down and a new POD with updated version created into Replica set -2 and go on …
Rollback Strategy
Once we upgraded the application, we found something which is not correct or application is not behaving as it should be in the new version of build.
As the updated application is not behaving in normal fashion and its require to undo the changes to rollback to previous version.
Kubernetes provides the option to rollback the deployment to the previous version. To do so we can use “undo” command
> Kubectl rollout undo deployment.app/(deployment-name)
This command will Destry all the PODs and containers from new Replica-set and bring back all old POD and containers in old Replica set.
List of Commands.
To create a deployment.
> kubectl create -f deployment-defination.yml
To list the deployment available.
> kubectl get deployments
To update the deployment definition file.
> kubectl apply -f deployment-definition.yml
> kubectl set image deployment/myapp-definition nginx=nginx:1.9.1
To view the rollout status of deployment.
> kubectl rollout status deployment.app/app-deployment
To view the history of deployment of the app.
> kubectl rollout history deployment.app/app-deployment
To undo the rollout of deployment.
> kubectl rollout undo deployment/myapp
To create a deployment.
> kubectl create -f deployment-defination.yml
To list the deployment available.
> kubectl get deployments
To update the deployment definition file.
> kubectl apply -f deployment-definition.yml
> kubectl set image deployment/myapp-definition nginx=nginx:1.9.1
To view the rollout status of deployment.
> kubectl rollout status deployment.app/app-deployment
To view the history of deployment of the app.
> kubectl rollout history deployment.app/app-deployment
To undo the rollout of deployment.
> kubectl rollout undo deployment/myapp
Comments
Post a Comment