Skip to content

Kubernetes – Kubectl Delete

Kubernetes is an open-source Container Management tool that automates container deployment, container scaling, descaling, and container load balancing (also called a container orchestration tool). It is written in Golang and has a huge community because it was first developed by Google and later donated to CNCF (Cloud Native Computing Foundation).

What is Kubectl Delete ?

kubectl delete is a command used in Kubernetes to remove resources from a cluster. This command is part of the kubectl command-line tool, which is the primary interface for interacting with Kubernetes clusters. kubectl delete is used to delete resources by using a configuration file or by using the type of resource and the resource name.

kubectl delete ([-f FILENAME] | TYPE [(NAME | --all)])
  • Delete by Configuration File (-f FILENAME):

    • -f FILENAME: Specifies a configuration file containing the resource definition(s) to be deleted.
    • This mode allows you to delete resources defined in a YAML or JSON file. You provide the path to the file after the -f flag, and kubectl deletes the resources defined in that file.
  • Delete by Resource Type and Name (TYPE [(NAME | --all)]):

    • TYPE: Specifies the type of resource to be deleted (e.g., deployment, service, pod, etc.).
    • NAME: Optionally, specifies the name of the specific resource instance to be deleted.
    • --all: Deletes all instances of the specified resource type across namespaces.

Example

Suppose we are having Nginx web server deployment and Service running.

Example 1

This is the nginx service manifest file.

Example 2

Here is the all running resources on the default namespace. Refer the below image for your reference.

Example 3

Deleting Deployment

To delete the resources in Kubernetes, the kubectl delete command provides the flexibility. We can delete resources by specifying a configuration file or directly by resource type and name. For instance, to delete a Deployment named deployment_name, you execute the below command:

kubectl delete deployment deployment_name

Alternatively, you can also point your terminal to the file containing the deployment config file and use the command

kubectl delete -f your_config_file.yaml

Delete Deployment

Deleting Service

The same principle applies to deleting Services. To delete a Service named service_name, you use:

kubectl delete service service_name

Alternatively, you can also point your terminal to the file containing the deployment config file and use the command

kubectl delete -f your_config_file.yaml

Delete Service

Delete All Pods in All Namespaces

Deleting Pods Across All Namespaces

Use the kubectl delete pods command with the --all flag to indicate delete the all pods in your cluster.

kubectl delete pods --all

Excluding System Pods

Since deleting system the pods might destabilize the cluster, it’s prudent to exclude them. Instead of delete the pods in the kube-system namespace, explicitly delete deployments across all namespaces, except for critical system deployments.

kubectl delete deploy --all -A

Excluding Kubernetes System Namespaces With a for Loop

Suppose that you are assigned the task of managing a Kubernetes cluster’s regular maintenance. The goal is to eliminate obsolete deployments and pods from different namespaces while preserving the confidentiality of the system namespaces. Let us see how you can successfully accomplish this.

Deleting Pods Across Non-System Namespaces

You can start by executing a series of commands orchestrated through a loop.

for ns in $(kubectl get namespaces -o name | grep -v kube- | cut -c 11-);
do
  kubectl delete pods --all -n $ns;
done

Deleting Pods Across Non-System Namespaces

Here’s what each step accomplishes:

  • Retrieve Namespace List: You receive a list for each namespace in the cluster through the use of kubectl.

  • Exclude System Namespaces: To be sure only those with user-defined namespaces are taken into thought, use grep to filter out any namespaces beginning with “kube-.”

  • Refine Output: With cut, extra characters have been eliminated from each line ensuring the names of non-system namespaces are the only characters left.

  • Iterate and Delete: You traverse each non-system namespace in a for loop and execute kubectl delete pods –all -n $ns to eliminate every pod within each namespace.

This streamlined approach safeguards system namespaces from accidental modifications while automates the cleanup process.

Deleting Deployments Across Non-System Namespaces

In the same way, you use the same procedure to deployment removal.

for ns in $(kubectl get namespaces -o name | grep -v kube- | cut -c 11-);
do
  kubectl delete deploy --all -n $ns;
done

Deleting Deployments Across Non-System Namespaces

Throughout iteration through non-system namespaces, with each iteration which includes kubectl delete deploy –all -n $ns, you can swiftly eliminate outdated deployments and preserve cluster hygiene without interfering with critical system components.

Delete All Pods in One Namespace

We can use the kubectl delete command with the –all flag and the -n flag to specify the namespace to remove all pods within this namespace. This is the instructions:

kubectl delete pods --all -n your-namespace

Delete All Pods in One Namespace

Put the name of the namespace from which you want to eliminate all pods in instead of your-namespace. Regardless of their status or labels, each pod in the specified namespace will be deleted with this command.

Delete All Pods in Multiple Namespaces

We can use a single kubectl command with the –all-namespaces flag and pods as the resource type to be demolished to delete all pods in all namespaces. This command speeds up the cleanup process by destroying all pods across all specified namespaces simultaneously. Before executing the command, make sure you have the appropriate permissions to avoid unanticipated results.

kubectl delete pods --all -n namespace1 -n namespace2 -n namespace3

Delete All Pods in Multiple Namespace

The names of the namespaces from which you wish to remove all pods ought to be substituted for namespace1, namespace2, namespace3, etc. Each pod within each namespace that has been provided is going to be deleted by this command.

Delete Pods Forcefully

Utilizing the kubectl get rid of command when combined with the –grace-period=0 parameter allows you to swiftly destroy pods in Kubernetes. With a zero-second grace time provided by this flag, here will be no waiting period until pods end gracefully. Here’s how to achieve it:

kubectl delete pods --all --grace-period=0 --force

Delete Pods Forcefully 1

With this command, each pod in the current namespace will be forcefully removed. The -n contention can be utilized to denote the namespace if you want to get rid of pods from that namespace:

kubectl delete pods --all --grace-period=0 --force -n your-namespace

Delete Pods Forcefully 1

Enter the name of the namespace from which you wish to delete all pods in place of your-namespace.

Delete All Resources in All Namespaces

Removing every resource in every namespace is an extreme step that could have significant consequences. In the case that you must move on, here’s how to use kubectl to do it:

kubectl delete all --all --all-namespaces

Delete All Resources in All Namespaces

This command will remove all resources (pods, deployments, services, etc.) in all namespaces. Make sure you completely understand the implications of continuing, as this move will affect all of the services and apps running within your Kubernetes cluster. Check you have enough privileges before running this command, and think about making backups or contacting your team to confirm.

Delete All Resources in One Namespace

To delete all resources in a specific namespace in Kubernetes, you can use the following kubectl command:

kubectl delete all --all -n your-namespace

Delete All Resources in One Namespaces

To remove all resources, replace your-namespace with the name of the namespace. All resources (pods, deployments, services, etc.) within the specified namespace will be removed by this command.

Delete All Resources in Multiple Namespaces

To delete all resources in multiple namespaces in Kubernetes, you can execute the following command:

kubectl delete all --all -n namespace1 -n namespace2 -n namespace3

Delete All Resources in Multiple Namespaces

The names of the namespaces from which you want to eliminate all resources must be replaced for namespace1, namespace2, namespace3, etc. All resources (pods, deployments, services, etc.) within each namespace which is given will be destroyed by this command.