204

Include:

  • Daemon Sets
  • Deployments
  • Jobs
  • Pods
  • Replica Sets
  • Replication Controllers
  • Stateful Sets
  • Services
  • ...

If has replicationcontroller, when delete some deployments they will regenerate. Is there a way to make kubenetes back to initialize status?

online
  • 4,919
  • 10
  • 32
  • 47

8 Answers8

408

Method 1: To delete everything from the current namespace (which is normally the default namespace) using kubectl delete:

kubectl delete all --all

all refers to all resource types such as pods, deployments, services, etc. --all is used to delete every object of that resource type instead of specifying it using its name or label.

To delete everything from a certain namespace you use the -n flag:

kubectl delete all --all -n {namespace}

Method 2: You can also delete a namespace and re-create it. This will delete everything that belongs to it:

kubectl delete namespace {namespace}
kubectl create namespace {namespace}

Note (thanks @Marcus): all in kubernetes does not refers to every kubernetes object, such as admin level resources (limits, quota, policy, authorization rules). If you really want to make sure to delete eveything, it's better to delete the namespace and re-create it. Another way to do that is to use kubectl api-resources to get all resource types, as seen here:

kubectl delete "$(kubectl api-resources --namespaced=true --verbs=delete -o name | tr "\n" "," | sed -e 's/,$//')" --all
victortv
  • 7,874
  • 2
  • 23
  • 27
55

Kubernetes Namespace would be the perfect options for you. You can easily create namespace resource.

kubectl create -f custom-namespace.yaml

$  apiVersion: v1
    kind: Namespace
    metadata:
      name:custom-namespace

Now you can deploy all of the other resources(Deployment,ReplicaSet,Services etc) in that custom namespaces.

If you want to delete all of these resources, you just need to delete custom namespace. by deleting custom namespace, all of the other resources would be deleted. Without it, ReplicaSet might create new pods when existing pods are deleted.

To work with Namespace, you need to add --namespace flag to k8s commands.

For example:

kubectl create -f deployment.yaml --namespace=custom-namespace

you can list all the pods in custom-namespace.

kubectl get pods --namespace=custom-namespace

Suresh Vishnoi
  • 17,341
  • 8
  • 47
  • 55
  • 1
    Once the custom namespace has been created, it makes sense to make it default as mentioned here - http://www.kubetips.com/set-a-default-namespace/ – Praveen Sripati Sep 25 '18 at 06:57
22

You can also delete Kubernetes resources with the help of labels attached to it. For example, suppose below label is attached to all resource

metadata:
  name: label-demo
  labels:
    env: dev
    app: nginx

now just execute the below commands

deleting resources using app label
$ kubectl delete pods,rs,deploy,svc,cm,ing -l app=nginx

deleting resources using envirnoment label
$ kubectl delete pods,rs,deploy,svc,cm,ing -l env=dev
Dan
  • 651
  • 1
  • 14
  • 31
  • 9
    Note that you can also delete all resources. `kubectl delete all -l env=dev` – theduke Sep 17 '20 at 10:47
  • 2
    It will only delete deployment, pods, rs, and svc. – Dan Nov 17 '20 at 14:42
  • 1
    Although this command will work but it could be possible to miss kubernetes object having same label. So first it should be found which all objects are there with same label and then use this command. – Anshul Singhal Apr 11 '21 at 04:15
  • 1
    Yup true, it is always advice to add label to your resources. – Dan Jul 05 '21 at 04:51
19

can also try kubectl delete all --all --all-namespaces

all refers to all resources

--all refers to all resources, including uninitialized ones

--all-namespaces in all all namespaces

WARNING: This will also delete kube-system pods, use with caution

Sven Hakvoort
  • 3,543
  • 2
  • 17
  • 34
adelmoradian
  • 312
  • 3
  • 3
6

First backup your namespace resources and then delete all resources found with the get all command:

kubectl get all --namespace={your-namespace} -o yaml > {your-namespace}.yaml
kubectl delete -f {your-namespace}.yaml

Nevertheless, still some resources exists in your cluster. Check with

kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found --namespace {your-namespace}

If you really want to COMPLETELY delete your namespace, go ahead with:

kubectl delete namespace {your-namespace}

(tested with Client v1.23.1 and Server v1.22.3)

Xos73
  • 61
  • 1
  • 2
3

In case if you want to delete all K8S resources in the cluster. Then, easiest way would be to delete the entire namespace.

kubectl delete ns <name-space>
Om Prakash
  • 91
  • 1
  • 7
  • 1
    What new does your answer add, compared to what has already been mentioned in https://stackoverflow.com/a/55838844/5493813? – st.huber Nov 12 '21 at 15:07
1
kubectl delete deploy,service,job,statefulset,pdb,networkpolicy,prometheusrule,cm,secret,ds -n namespace -l label
Suraj Rao
  • 29,388
  • 11
  • 94
  • 103
sumit salunke
  • 125
  • 2
  • 10
0

kubectl delete all --all to delete all the resource in cluster. after deleting all resources k8's will again relaunch the default services for cluster.