Learn to code by coding - try our free CS courses

How to Restart All Pods in a Kubernetes Namespace

Where I work, we use a repo-per-namespace setup and so it often happens that I want to restart all pods and deployments in a single Kubernetes namespace.

Maybe I want to see the startup logs, maybe I want to shut down production for a few seconds, don’t question my motives.

Anyway, what matters is that bouncing all deployments one after another is really inconvenient and I don’t like typing.

Take Action and Learn Go

Our ‘Go Mastery’ courses include 160+ interactive coding lessons to give you all the skills you need to become a successful Go developer.

The best way to bounce (kubectl >= 1.15)

I recently found out from a friend there is an easier way as of kubectl 1.15+. Restarting all the pods in a namespace is as easy as running the following kubectl command.

kubectl -n {NAMESPACE} rollout restart deploy
Code language: Bash (bash)

The old way (kubectl <= 1.14)

In older versions of kubectl you needed to run a command for each deployment in the namespace. In true lazy-developer-fashion I wrote a little script that will do it for me:

deploys=`kubectl -n $1 get deployments | tail -n +2 | cut -d ' ' -f 1` for deploy in $deploys; do kubectl -n $1 rollout restart deployments/$deploy done
Code language: Bash (bash)

It’s fairly simple to use. Assuming I named the script kubebounce.sh:

./kubebounce.sh {NAMESPACE}
Code language: Bash (bash)

I made a little open-source repo with installation instructions if you want to add it to your $PATH. Be sure to star the repo if you find it useful.

How It Works

Bash isn’t exactly the easiest language to read. Let’s go over each portion of the script.

deploys=`kubectl -n $1 get deployments | tail -n +2 | cut -d ' ' -f 1`
Code language: Bash (bash)

In bash, $1 refers to the first command-line argument, the namespace in our case. In essence, this line gets all the deployments in the target namespaces and saves them into a deploys variable. We pipe the output of the kubectl get deployments command into a tail -n +2 command, which just strips of the first line of the output. Then we run that output through a cut command which leaves us with a nice list of all the deployment names.

That’s actually the trickier part, next we just loop over all the deployments and restart them one-by-one:

for deploy in $deploys; do kubectl -n $1 rollout restart deployments/$deploy done
Code language: Bash (bash)

Join 10,000+ readers of our cutting-edge CS content

Our best articles in your inbox. Never spam. Always free.

Have questions or feedback?

Follow and hit me up on Twitter @q_vault if you have any questions or comments. If I’ve made a mistake in the article, please let me know so I can get it corrected!

Leave a Comment