# Використання каскадного видалення у кластері

LLMS index: [llms.txt](/llms.txt)

---

<!--overview-->

Ця сторінка показує, як вказати тип [каскадного видалення](/docs/concepts/architecture/garbage-collection/#cascading-deletion) у вашому кластері під час <a class='glossary-tooltip' title='Загальний термін для різних механізмів, які Kubernetes використовує для очищення ресурсів кластера.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/architecture/garbage-collection/' target='_blank' aria-label='збору сміття'>збору сміття</a>.

## Перш ніж ви розпочнете

<p>Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою <a href="https://minikube.sigs.k8s.io/docs/tutorials/multi_node/">minikube</a> або використовувати одну з цих пісочниць:</p>
<ul>
<li><a href="https://labs.iximiuz.com/playgrounds?category=kubernetes&filter=all">iximiuz Labs</a></li>
<li><a href="https://killercoda.com/playgrounds/scenario/kubernetes">Killercoda</a></li>
<li><a href="https://kodekloud.com/public-playgrounds">KodeKloud</a></li>
</ul>


Вам також потрібно [створити приклад Deployment](/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment), щоб експериментувати з різними типами каскадного видалення. Вам доведеться створити Deployment заново для кожного типу.

## Перевірка власників у ваших Podʼах {#check-owner-references-on-your-pods}

Перевірте, що поле `ownerReferences` присутнє у ваших Podʼах:

```shell
kubectl get pods -l app=nginx --output=yaml
```

Вивід має поле `ownerReferences`, схоже на це:

```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}

Стандартно Kubernetes використовує [фонове каскадне видалення](/docs/concepts/architecture/garbage-collection/#background-deletion) для видалення залежностей обʼєкта. Ви можете переключитися на каскадне видалення на передньому плані за допомогою `kubectl` або за допомогою API Kubernetes, залежно від версії Kubernetes вашого кластера. 
 <p>Для перевірки версії введіть  <code>kubectl version</code>.</p>


Ви можете видаляти обʼєкти за допомогою каскадного видалення, використовуючи `kubectl` або API Kubernetes.

**За допомогою kubectl**

Виконайте наступну команду:
<!--TODO: verify release after which the --cascade flag is switched to a string in https://github.com/kubernetes/kubectl/commit/fd930e3995957b0093ecc4b9fd8b0525d94d3b4e-->

```shell
kubectl delete deployment nginx-deployment --cascade=foreground
```

**За допомогою API Kubernetes**

1. Запустіть локальний проксі:

   ```shell
   kubectl proxy --port=8080
   ```

2. Використовуйте `curl` для виклику видалення:

   ```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"
   ```

   Вивід містить `foregroundDeletion` <a class='glossary-tooltip' title='Ключ простору імен, який наказує Kubernetes чекати до виконання певних умов перед тим, як повністю видалити обʼєкт, позначений для видалення.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/overview/working-with-objects/finalizers/' target='_blank' aria-label='finalizer'>finalizer</a> подібно до цього:

   ```json
   "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}

1. [Створіть приклад Deployment](/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment).
1. Використовуйте або `kubectl`, або API Kubernetes для видалення Deployment, залежно від версії Kubernetes вашого кластера. 
 <p>Для перевірки версії введіть  <code>kubectl version</code>.</p>


Ви можете видаляти обʼєкти за допомогою фонового каскадного видалення за допомогою `kubectl`
або API Kubernetes.

Kubernetes типово використовує фонове каскадне видалення, і робить це навіть якщо ви виконуєте наступні команди без прапорця `--cascade` або аргументу `propagationPolicy`.

**За допомогою kubectl**

Виконайте наступну команду:

```shell
kubectl delete deployment nginx-deployment --cascade=background
```

**За допомогою API Kubernetes**

1. Запустіть локальний проксі:

   ```shell
   kubectl proxy --port=8080
   ```

2. Використовуйте `curl` для виклику видалення:

   ```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"
   ```

   Вивід подібний до цього:

   ```json
   "kind": "Status",
   "apiVersion": "v1",
   ...
   "status": "Success",
   "details": {
       "name": "nginx-deployment",
       "group": "apps",
       "kind": "deployments",
       "uid": "cc9eefb9-2d49-4445-b1c1-d261c9396456"
   }
   ```

## Видалення власних обʼєктів та осиротілих залежностей {#set-orphan-deletion-policy}

Типово, коли ви вказуєте Kubernetes видалити обʼєкт, <a class='glossary-tooltip' title='Контролер — цикл управління, що спостерігає за загальним станом кластера через apiserver і вносить зміни в намаганні наблизити поточний стан до бажаного.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/architecture/controller/' target='_blank' aria-label='controller'>controller</a> також видаляє залежні обʼєкти. Ви можете осиротити залежності використовуючи `kubectl` або API Kubernetes, залежно від версії Kubernetes вашого кластера.

 <p>Для перевірки версії введіть  <code>kubectl version</code>.</p>


**За допомогою kubectl**

Виконайте наступну команду:

```shell
kubectl delete deployment nginx-deployment --cascade=orphan
```

**За допомогою API Kubernetes**

1. Запустіть локальний проксі:

   ```shell
   kubectl proxy --port=8080
   ```

1. Використовуйте `curl` для виклику видалення:

   ```shell
   curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deployment \
       -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Orphan"}' \
       -H "Content-Type: application/json"
   ```

   Вивід містить `orphan` у полі `finalizers`, подібно до цього:

   ```json
   "kind": "Deployment",
   "apiVersion": "apps/v1",
   "namespace": "default",
   "uid": "6f577034-42a0-479d-be21-78018c466f1f",
   "creationTimestamp": "2021-07-09T16:46:37Z",
   "deletionTimestamp": "2021-07-09T16:47:08Z",
   "deletionGracePeriodSeconds": 0,
   "finalizers": [
     "orphan"
   ],
   ...
   ```

Ви можете перевірити, що Podʼи, керовані Deployment, все ще працюють:

```shell
kubectl get pods -l app=nginx
```

## Що далі

* Дізнайтеся про [власників та залежності](/docs/concepts/overview/working-with-objects/owners-dependents/) у Kubernetes.
* Дізнайтеся про [завершувачів в Kubernetes](/docs/concepts/overview/working-with-objects/finalizers/).
* Дізнайтеся про [збирання сміття](/docs/concepts/architecture/garbage-collection/).
