Rolling updates on Kubernetes deployments

2 min read

There are several strategies available for updating a deployment on Kubernetes, by default it will trigger a rolling update: It will deploy the new version before tearing down the old one so there's no downtime associated to it.

Let's see how we can see this process by applying an update to a deployment:

$ kubectl apply -f deployment.yaml

First it will start the new cotainer (notice the AGE column for each container):

$ kubectl get pods
NAME                                     READY   STATUS      RESTARTS   AGE
pet2cattle-54b4f774b6-z6phh              1/1     Running     0          20m
pet2cattle-7855d874df-ppsfm              0/1     Running     0          3s

Once the new one is available, it will terminate the old one:

$ kubectl get pods
NAME                                     READY   STATUS        RESTARTS   AGE
pet2cattle-7855d874df-ppsfm              1/1     Running       0          17s
pet2cattle-54b4f774b6-z6phh              0/1     Terminating   0          20m

So at the end it will one be running the new one:

$ kubectl get pods
NAME                                     READY   STATUS      RESTARTS   AGE
pet2cattle-7855d874df-ppsfm              1/1     Running     0          26s

We can also check the status of the update using kubectl rollout status:

$ kubectl rollout status deploy pet2cattle
deployment "pet2cattle" successfully rolled out

If the deployment update haven't finished yet, this command will wait until the update have been completed:

$ kubectl rollout status deployment/pet2cattle
Waiting for deployment "pet2cattle" rollout to finish: 1 of 2 updated replicas are available...
deployment "pet2cattle" successfully rolled out

We even have a update history available:

$ kubectl rollout history deploy pet2cattle
deployment.apps/pet2cattle 
REVISION  CHANGE-CAUSE
21        <none>
22        <none>
23        <none>
24        <none>
26        <none>
28        <none>
29        <none>
30        <none>
32        <none>
33        <none>
34        <none>

Posted on 17/05/2021