Skip to main content

Rolling Updates and Rollbacks in Kubernetes

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  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

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

To view the history of deployment of the app.
> kubectl rollout history

To undo the rollout of deployment.
> kubectl rollout undo deployment/myapp


Popular posts from this blog

Changing the FQDN of the vCenter appliance (VCSA)

This article states how to change the system name or the FQDN of the vCenter appliance 6.x You may not find any way to change the FQDN from the vCenter GUI either from VAMI page of from webclient as the option to change the hostname always be greyed out. Now the option left is from the command line of VCSA appliance. Below steps will make it possible to change the FQDN of the VCSA from the command line. Access the VCSA from console or from Putty session. Login with root permission Use above command in the command prompt of VCSA : /opt/vmware/share/vami/vami_config_net Opt for option 3 (Hostname) Change the hostname to new name Reboot the VCSA appliance.   After reboot you will be successfully manage to change the FQDN of the VCSA . Note: Above step is unsupported by VMware and may impact your SSL certificate and face problem while logging to vSphere Web Client. If you are using self-signed certificate, you can regenerate the certificate with the

Collecting Logs from NSX-T Edge nodes using CLI

  This article explains how to extract the logs from NSX-T Edge nodes from CLI. Let's view the steps involved: 1) Login to NSX-T  Edge node using CLI from admin credentials. 2) Use of  " get support-bundle " for Log extraction. get support-bundle command will extract the complete logs from NSX-T manager/Edge nodes. nsx-manager-1> get support-bundle file support-bundle.tgz 3) Last step is to us e of " copy file support-bundle.tgz url " command. copy file will forward your collected logs from the NSX-T manager to the destination(URL) host from where you can download the logs. copy file support.bundle.tgz url scp://root@ Here, the URL specified is the ESXi host ( under /tmp partition where logs will be copied and from there one can extract it for further log review. Happy Learning.  :)

Removing NSX-T manager extension from vCenter

In NSX-T starting from ver 2.4 NSX-T appliance got decoupled from vCenter where now its not mandatory to run NSX-T on vCenter platform only. Now NSX-T can be managed through standalone ESXi host, KVM or through container platform. As in version 2.4 there is still an option available to connect vCenter to NSX-T using Compute Manager. Here in this blog we will learn how we can unregister and register NSX-T extenstion from vCenter in case of any sync or vCenter connectivity issue with NSX-T. Lets get started.. 1) Login to NSX-T UI Go to -> System ->Compute Manager Here, vCenter is showing in Down status where the status is showing as "Not Registered" 2) When we click on "Not Registered" option its states below error. 3) When try to click on Resolve option its states below. At this stage if the Resolve option doesn't work then its require the remove the NSX-T extenstion from vCenter. To remove the NSX-T e