Use Cascading Deletion in a Cluster [page]deterministic
This page shows you how to specify the type of [cascading deletion](/docs/concepts/architecture/garbage-collection/#cascading-deletion) to use in your cluster during [garbage collection](#gloss:garbage-collection).
##
You also need to [create a sample Deployment](/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment) to experiment with the different types of cascading deletion. You will need to recreate the Deployment for each type.
## Check owner references on your pods
Check that the `ownerReferences` field is present on your pods:
```shell kubectl get pods -l app=nginx --output=yaml ```
The output has an `ownerReferences` field similar to this:
```yaml apiVersion: v1 ... ownerReferences: - apiVersion: apps/v1 blockOwnerDeletion: true controller: true kind: ReplicaSet name: nginx-deployment-6b474476c4 uid: 4fdcd81c-bd5d-41f7-97af-3a3b759af9a7 ... ```
## Use foreground cascading deletion {#use-foreground-cascading-deletion}
By default, Kubernetes uses [background cascading deletion](/docs/concepts/architecture/garbage-collection/#background-deletion) to delete dependents of an object. You can switch to foreground cascading deletion using either `kubectl` or the Kubernetes API, depending on the Kubernetes version your cluster runs.
You can delete objects using foreground cascading deletion using `kubectl` or the Kubernetes API.
Using kubectl
Run the following command:
```shell kubectl delete deployment nginx-deployment --cascade=foreground ```
Using the Kubernetes API
1. Start a local proxy session:
```shell kubectl proxy --port=8080 ```
1. Use `curl` to trigger deletion:
```shell curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deployment \ -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \ -H "Content-Type: application/json" ```
The output contains a `foregroundDeletion` [finalizer](#gloss:finalizer) like this:
``` "kind": "Deployment", "apiVersion": "apps/v1", "metadata": { "name": "nginx-deployment", "namespace": "default", "uid": "d1ce1b02-cae8-4288-8a53-30e84d8fa505", "resourceVersion": "1363097", "creationTimestamp": "2021-07-08T20:24:37Z", "deletionTimestamp": "2021-07-08T20:27:39Z", "finalizers": [ "foregroundDeletion" ] ... ```
## Use background cascading deletion {#use-background-cascading-deletion}
1. [Create a sample Deployment](/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment). 1. Use either `kubectl` or the Kubernetes API to delete the Deployment, depending on the Kubernetes version your cluster runs.
You can delete objects using background cascading deletion using `kubectl` or the Kubernetes API.
Kubernetes uses background cascading deletion by default, and does so even if you run the following commands without the `--cascade` flag or the `propagationPolicy` argument.
Using kubectl
Run the following command:
```shell kubectl delete deployment nginx-deployment --cascade=background ```
Using the Kubernetes API
1. Start a local proxy session:
```shell kubectl proxy --port=8080 ```
1. Use `curl` to trigger deletion:
```shell curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deployment \ -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Background"}' \ -H "Content-Type: application/json" ```
The output is similar to this:
``` "kind": "Status", "apiVersion": "v1", ... "status": "Success", "details": { "name": "nginx-deployment", "group": "apps", "kind": "deployments", "uid": "cc9eefb9-2d49-4445-b1c1-d261c9396456" } ```
## Delete owner objects and orphan dependents {#set-orphan …(trimmed)