Restart pods without taking the service down

2 min read | by Jordi Prats

As of kubernetes 1.15, you can do a rolling restart of all pods for a deployment without taking the service down. To achieve this we'll have to use kubectl rollout restart.

Let's asume you have a deployment with two replicas:

$ kubectl get pods NAME READY STATUS RESTARTS AGE pet2cattle-5454555dbb-6jtnz 1/1 Running 0 131m pet2cattle-5454555dbb-czw42 1/1 Running 0 19s 

To be able to restart the pods without causing downtime we can use kubectl rollout restart on the deployment:

$ kubectl rollout restart deployment pet2cattle deployment.apps/pet2cattle restarted 

This command will the the deployment controller to deploy another set of pods like it would do with an update. Taking a look at the pods we will be able to notice the different ID (5454555dbb vs 5c74f6dd58)

$ kubectl get pods NAME READY STATUS RESTARTS AGE pet2cattle-5454555dbb-6jtnz 1/1 Running 0 131m pet2cattle-5454555dbb-czw42 1/1 Running 0 43s pet2cattle-5c74f6dd58-dl7q4 0/1 Running 0 4s 

Once the new deployment set (5c74f6dd58) is ready, the deployment controller will take down the old one (5454555dbb)

$ kubectl get pods NAME READY STATUS RESTARTS AGE pet2cattle-5c74f6dd58-dl7q4 1/1 Running 0 34s pet2cattle-5c74f6dd58-b2nxb 1/1 Running 0 27s pet2cattle-5454555dbb-6jtnz 0/1 Terminating 0 132m 

We can also keep track of the operation using kubectl rollout status

$ kubectl rollout status deploy pet2cattle Waiting for deployment "pet2cattle" rollout to finish: 1 old replicas are pending termination... Waiting for deployment "pet2cattle" rollout to finish: 1 old replicas are pending termination... deployment "pet2cattle" successfully rolled out 

Posted on 01/03/2021