Terminus by Warp
Restart Kubernetes Pods with kubectl

Restart Kubernetes Pods with kubectl

Sudha Bulusu
Sudha Bulusu

A Kubernetes pod serves as an isolated environment for running a single process, representing the smallest operational unit within the Kubernetes ecosystem. Unlike other resources, such as Deployments, which are replaced during updates, pods have a more persistent nature. Consequently, Kubernetes does not provide a dedicated `kubectl restart pod` command. Instead, various methods, both automatic and manual, can be employed to restart pods effectively.

The short answer

To restart a Kubernetes pod, you can use the [.inline-code]kubectl delete pod[.inline-code] command as follows:

 $ kubectl delete pod <pod_name> 

Where:

  • [.inline-code]pod_name[.inline-code] is the name of the pod to delete

Kubernetes will delete the pod and automatically recreate a new one with the same configuration.

[#easily-recall-syntax-with-ai] Easily retrieve this command using Warp’s AI Command Suggestions [#easily-recall-syntax-with-ai]

If you’re using Warp as your terminal, you can easily retrieve this command using the Warp AI Command Suggestions feature:

Entering [.inline-code]kubectl delete pod[.inline-code] in the AI Command Suggestions will prompt a [.inline-code]kubectl[.inline-code] command that can then quickly be inserted into your shell by doing [.inline-code]CMD+ENTER[.inline-code].

[#delete-multiple-pods] Deleting multiple pods [#delete-multiple-pods]

To delete all the pods that have failed across all namespaces, you can use the following command:

 $ kubectl delete pods --field-selector status.phase=Failed -A

Where:

  • The [.inline-code]--field-selector[.inline-code] flag with [.inline-code]status.phase=Failed[.inline-code] specifies failed pods.
  • The [.inline-code]-A[.inline-code] flag (short for [.inline-code]--all-namespaces[.inline-code]) specifies all the namespaces in the cluster.

Deleting pods in a namespace

To delete all the failed pods in a particular namespace, you can use the following command instead:

 $ kubectl delete pods --field-selector status.phase=Failed --namespace=<namespace> 

Where:

  • [.inline-code]namespace[.inline-code] is the name of the namespace from which to delete the failed pods.

[#delete-pods-by-label] Deleting pods by label [#delete-pods-by-label]

If you’ve used labels to organize your pods, you can delete pods with a specific label using the [.inline-code]-l[.inline-code] flag as follows:

 $ kubectl delete pods -l <label>=<value> 

For example:

 $ kubectl delete pods -l environment=test

The above command will delete all the pods with the [.inline-code]environment[.inline-code] label set to [.inline-code]test[.inline-code].

[#define-a-restart-policy] Defining a restart policy [#define-a-restart-policy]

Pod specifications include a [.inline-code]restartPolicy[.inline-code] field used to define the restart policy associated with a pod. The available values are [.inline-code]Always[.inline-code], [.inline-code]OnFailure[.inline-code], and [.inline-code]Never[.inline-code].

[#always-restart-policy]The [.inline-code]Always[.inline-code] restart policy[#always-restart-policy]

[.inline-code]Always[.inline-code] is the default restart policy. It ensures that Kubernetes will automatically restart a container within the pod whenever it terminates, whether it exits successfully or fails. As in the example below, a web server is a common use case for a restart policy of [.inline-code]Always[.inline-code].

 apiVersion: v1
kind: Pod
metadata:
  name: nginx-webserver-pod
spec:
  restartPolicy: Always
  containers:
    - name: my-container
      image: nginx:latest

[#the-on-failure-restart-policy] The [.inline-code]OnFailure[.inline-code] restart policy [#the-on-failure-restart-policy]

The [.inline-code]OnFailure[.inline-code] restart policy is used for pods whose containers execute tasks on a schedule or only once. This ensures that the containers in the pod are replaced automatically in the event of a failure and prevents them from restarting unnecessarily, thus consuming resources.

The example below of a container that copies a file from one directory to another is a use case for setting the restart policy to [.inline-code]OnFailure[.inline-code].

 apiVersion: v1
kind: Pod
metadata:
  name: busybox-file-task
spec:
  restartPolicy: OnFailure
  containers:
    - name: busybox-container
      image: busybox:latest
      command: ["cp", "/path/to/source/file", "/path/to/destination/file"]

[#restart-with-rolling-updates] Restarting pods using rolling updates [#restart-with-rolling-updates]

Aside from choosing the appropriate restart policy, there are many scenarios where it becomes necessary to restart a pod manually. The most recommended method for a manual restart is the rolling restart.

A rollout is a process used to ensure that updates are rolled out with minimal disruption of the availability of the application by terminating pods gracefully and recreating them one at a time. This method is available in Kubernetes v1.15 and later.

[#rolling-restart-of-a-deployment] Performing the rolling restart of a Deployment [#rolling-restart-of-a-deployment]

A Deployment controller can be defined to declare the desired application state, including details such as the container image, number of replicas, and update strategy. A common use case is managing the deployment and scaling of a web application.

If a change is made to the Deployment manifest, all the pods in the Deployment can be restarted with the command below:

 $ kubectl rollout restart deployment/<deployment_name> 

[#rolling-restart-using-namespaces] Performing a rolling restart using namespaces [#rolling-restart-using-namespaces]

Namespaces are logical, isolated environments within a Kubernetes cluster that allow you to group and manage Kubernetes resources separately.

To restart all the Deployments located in a specified namespace, you can use the following [.inline-code]kubectl rollout restart deployment[.inline-code] command with the [.inline-code]-n[.inline-code] flag as follows:

 $ kubectl rollout restart deployment/<deployment_name>-n<namespace> 

[#rolling-restart-using-labels] Performing a rolling restart using labels [#rolling-restart-using-labels]

Labels are key-value pairs attached to Kubernetes objects used for organizing resources based on specific criteria.

To restart all the pods based on a specific label, you can use the [.inline-code]kubectl rollout restart pod[.inline-code] command with the [.inline-code]-l[.inline-code] flag as follows:

 $ kubectl rollout restart pod -l <label>=<value> 

For example:

 $ kubectl rollout restart pod -l environment=development

The above command will restart all the pods identified by the [.inline-code]environment=development[.inline-code] label.

[#scale-down-deployment-replicas] Scaling down deployment replicas [#scale-down-deployment-replicas]

Scaling pods down is another method to restart pods in a controlled manner with graceful termination.

To restart a pod by scaling deployment replicas to 0, you can use the following [.inline-code]kubectl scale deployment[.inline-code] command:

 $ kubectl scale --replicas=0 deployment <deployment_name> 

Which will gracefully terminate all the pods in the specified deployment.

You can then recreate them by setting the number of replicas to 1 or more as follows:

 $ kubectl scale --replicas=1 deployment <deployment_name> 

[#scale-down-using-namespaces] Scaling down Deployments in a namespace [#scale-down-using-namespaces]

To restart the pods in a particular namespace, you can use the [.inline-code]kubectl scale deployment[.inline-code] with the [.inline-code]-n[.inline-code] flag as follows:

 $ kubectl scale --replicas=0 deployment <deployment_name> -n <namespace> 
$ kubectl scale --replicas=1 deployment <deployment_name> -n <namespace> 

[#scale-down-using-labels] Scaling down Deployment using labels [#scale-down-using-labels]

To restart pods with a specific label, you can use the [.inline-code]kubectl scale[.inline-code] command with the [.inline-code]--selector[.inline-code] flag as follows:

 $ kubectl scale --replicas=0 --selector=<label>=<value> deployment
$ kubectl scale --replicas=1 --selector=<label>=<value> deployment

Where:

  • [.inline-code]label[.inline-code] is the name of the label selector.
  • [.inline-code]value[.inline-code] is the value associated with this label.

For example:

 $ kubectl scale --replicas=0 --selector=app=my-app deployment
$ kubectl scale --replicas=1 --selector=app=my-app deployment

[#update-environment-variables] Updating environment variables [#update-environment-variables]

Updating the environment variables of a pod, or container in a pod, will gracefully terminate the pod, change the specified environment variables, and recreate the pod.

[#update-pods-environment-variables] Updating the environment variables of a pod [#update-pods-environment-variables]

To update the environment variables of a pod, you can use the [.inline-code]kubectl set env[.inline-code] command as follows:

 $ kubectl set env pod <pod_name> -n<namespace> <env_name> =<env_value> 

Where:

  • [.inline-code]pod_name[.inline-code] is the name of the pod you want to update.
  • [.inline-code]namespace[.inline-code] is the name of the namespace the pod runs in.
  • [.inline-code]env_name[.inline-code] is the name of the environment variable you want to add or update.
  • [.inline-code]env_value[.inline-code] is the value of the `env_name` variable.

For example:

 $ kubectl set env pod my-pod -n my-namespace USER_NAME=admin USER_PWD=admin

[#update-containers-environment-variables]Updating the environment variables of a container [#update-containers-environment-variables]

To update the environment variables of a specific container in a pod, you can use the [.inline-code]kubectl set env[.inline-code] command as follows:

 $ kubectl set env pod <pod_name> -n <namespace> -c <container_name> <env_name>=<env_value> 

Where:

  • [.inline-code]pod_name[.inline-code] is the name of the pod you want to update.
  • [.inline-code]namespace[.inline-code] is the name of the namespace the pod runs in.
  • [.inline-code]container_name[.inline-code] is the name of the container in the pod.
  • [.inline-code]env_name[.inline-code] is the name of the environment variable you want to add or update.
  • [.inline-code]env_value[.inline-code] is the value of the [.inline-code]env_name[.inline-code] variable.

For example:

 $ kubectl set env pod my-pod -n my-namespace -c database DB_NAME=admin DB_PWD=admin

Experience the power of Warp

  • Write with an IDE-style editor
  • Easily navigate through output
  • Save commands to reuse later
  • Ask Warp AI to explain or debug
  • Customize keybindings and launch configs
  • Pick from preloaded themes or design your own
brew install --cask warp
Copied!
Join the Windows waitlist:
Success! You will receive an email from Warp when the release is available to download.
Oops! Something went wrong while submitting the form.
Join the Linux waitlist:
Success! You will receive an email from Warp when the release is available to download.
Oops! Something went wrong while submitting the form.
Join the Linux waitlist or join the Windows waitlist
Join the Windows waitlist:
Success! You will receive an email from Warp when the release is available to download.
Oops! Something went wrong while submitting the form.