How to Restart Kubernetes Pods With Kubectl
Praveen Dandu
?? DevOps | Platform & SRE Engineer | Cloud Expert (AWS & GCP) ?? | Terraform, Kubernetes, Ansible Pro | CI/CD Specialist | Public Sector
Kubernetes is a powerful container orchestration platform that helps developers manage and scale containerized applications. One of the most common tasks in Kubernetes is to restart pods, either to apply changes to the underlying application or to address issues with the pod itself. In this blog post, we will explore several methods for restarting pods in Kubernetes using kubectl.
Method 1: Restarting a Single Pod
The most straightforward way to restart a pod in Kubernetes is to use the kubectl delete pod command followed by the kubectl apply command. Here are the steps:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-pod 1/1 Running 0 1h
2. Use the kubectl delete pod command to delete the pod. Kubernetes will automatically create a new pod to replace the one you just deleted.
$ kubectl delete pod my-pod
pod "my-pod" deleted
3. Use the kubectl apply command to apply any changes to the pod configuration or to restart the pod with the same configuration.
$ kubectl apply -f my-pod.yaml
pod/my-pod created
Method 2: Rolling Restart of a Deployment
If you need to restart all the pods associated with a deployment, you can use the kubectl rollout restart command. This command will create a new replica set with updated pods and will gradually scale down the old replica set while scaling up the new one. Here are the steps:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-app 3/3 3 3 1h
2. Use the kubectl rollout restart command to trigger a rolling restart of the deployment.
$ kubectl rollout restart deployment my-app
deployment.apps/my-app restarted
3. Monitor the progress of the rolling restart using the kubectl rollout status command.
领英推荐
$ kubectl rollout status deployment my-app
Waiting for deployment "my-app" rollout to finish: 2 out of 3 new replicas have been updated...
4. Once the rolling restart is complete, all pods associated with the deployment will have been restarted.
Method 3: Using a Restart Policy
You can also configure Kubernetes to automatically restart pods that fail using a restart policy. The most common restart policy is Always, which will restart the pod whenever it crashes or is deleted. Here's how to set a restart policy:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
restartPolicy: Always
containers:
- name: my-container
image: my-image
2. Apply the updated pod definition using the kubectl apply command.
$ kubectl apply -f my-pod.yaml
pod/my-pod created
Whenever the pod crashes or is deleted, Kubernetes will automatically create a new pod to replace it.
Method 4: Using kubectl scale
Another way to restart a pod is by scaling down the number of replicas to zero and then scaling it up again. This method will cause the old pods to be terminated and replaced with new ones. Here is the syntax for the command:
kubectl scale deployment/<deployment-name> --replicas=0 && kubectl scale deployment/<deployment-name> --replicas=<number-of-replicas>
For example, to restart a deployment named my-deployment with three replicas, you can run the following command:
kubectl scale deployment/my-deployment --replicas=0 && kubectl scale deployment/my-deployment --replicas=3
This command will scale down the deployment to zero replicas and then scale it up again to the desired number of replicas, causing the old pods to be replaced with new ones.
In conclusion, restarting Kubernetes pods using kubectl is easy and can be accomplished using several methods. The kubectl rollout restart command is the recommended method as it performs a rolling restart of all the pods in a deployment or statefulset. However, if you need to restart a single pod, you can use the kubectl delete command or scale down the deployment and then scale it up again using the kubectl scale command.