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

Unable to poweron the VM. (Failed to lock the file)

I have encountered may issues like where after some upgrade or migration we were unable to power on the VM. Figure 1 An error was received from the ESX host while powering on VM HSSVSQL01. Failed to start the virtual machine. Cannot open the disk '/vmfs/volumes/578d835c-18b2c97a-9b0d-0025b5f13920/SAMPLE1_cloud/000000.vmdk' or one of the snapshot disks it depends on. Failed to lock the file In above Figure:1, where while powering on the VM, its prompt for an error. Well, there are several reason for where the VM unable to poweron and you can find many article on this. Here in this article we will discuss to resolve this issue. Please use below step to resolve the disk lock issue  C hecked that VM is running on snapshot if its getting error " VM Consolidation required". Checked the snapshot manager if its showing any snapshot. If yes, try to delete the  snapshot. Verified the same from Esxi cl

VM Creation Date & Time from Powercli

Most of the times we have several requirement when we talk about IT environment like designing , deployment , compliance check or for Security auditing the environment. Somewhere during security auditing we require to provide several information to security team to get successful audit. One of them is the compliance of Virtual machine auditing of creation date and time. Here into this post we will explore how to get the creation date and time of virtual machine hosted into the vCenter or ESXi. To get the details we will use VMware Powercli to extract the details. By default there is no function added into Powercli to get such details, so here we will add a function of vm creation date. Below is the function which needed to be copy and paste into the Powercli. ======================================================================= function  Get-VMCreationTime  {     $vms  =  get-vm     $vmevts  = @()     $vmevt  =  new-object  PSObject     for