Використання каскадного видалення у кластері
Ця сторінка показує, як вказати тип каскадного видалення у вашому кластері під час збору сміття.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Вам також потрібно створити приклад Deployment, щоб експериментувати з різними типами каскадного видалення. Вам доведеться перестворити Deployment для кожного типу.
Перевірка власників у ваших Podʼах
Перевірте, що поле ownerReferences
присутнє у ваших Podʼах:
kubectl get pods -l app=nginx --output=yaml
Вивід має поле ownerReferences
, схоже на це:
apiVersion: v1
...
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: nginx-deployment-6b474476c4
uid: 4fdcd81c-bd5d-41f7-97af-3a3b759af9a7
...
Використання каскадного видалення на видності
Стандартно Kubernetes використовує фонове каскадне видалення для видалення залежностей обʼєкта. Ви можете переключитися на каскадне видалення на видноті за допомогою kubectl
або за допомогою API Kubernetes, залежно від версії Kubernetes вашого кластера.
Для перевірки версії введіть kubectl version
.
Ви можете видаляти обʼєкти за допомогою каскадного видалення, використовуючи kubectl
або API Kubernetes.
За допомогою kubectl
Виконайте наступну команду:
kubectl delete deployment nginx-deployment --cascade=foreground
За допомогою API Kubernetes
Запустіть локальний проксі:
kubectl proxy --port=8080
Використовуйте
curl
для виклику видалення: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
finalizer подібно до цього:"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" ] ...
Використання фонового каскадного видалення
- Створіть приклад Deployment.
- Використовуйте або
kubectl
, або API Kubernetes для видалення Deployment, залежно від версії Kubernetes вашого кластера. Для перевірки версії введітьkubectl version
.
Ви можете видаляти обʼєкти за допомогою фонового каскадного видалення за допомогою kubectl
або API Kubernetes.
Kubernetes типово використовує фонове каскадне видалення, і робить це навіть якщо ви виконуєте наступні команди без прапорця --cascade
або аргументу propagationPolicy
.
За допомогою kubectl
Виконайте наступну команду:
kubectl delete deployment nginx-deployment --cascade=background
За допомогою API Kubernetes
Запустіть локальний проксі:
kubectl proxy --port=8080
Використовуйте
curl
для виклику видалення: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"
Вивід подібний до цього:
"kind": "Status", "apiVersion": "v1", ... "status": "Success", "details": { "name": "nginx-deployment", "group": "apps", "kind": "deployments", "uid": "cc9eefb9-2d49-4445-b1c1-d261c9396456" }
Видалення власних обʼєктів та загублених залежностей
Типово, коли ви вказуєте Kubernetes видалити обʼєкт, controller також видаляє залежні обʼєкти. Ви можете загубити залежності використовуючи kubectl
або API Kubernetes, залежно від версії Kubernetes вашого кластера.
Для перевірки версії введіть kubectl version
.
За допомогою kubectl
Виконайте наступну команду:
kubectl delete deployment nginx-deployment --cascade=orphan
За допомогою API Kubernetes
Запустіть локальний проксі:
kubectl proxy --port=8080
Використовуйте
curl
для виклику видалення: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
, подібно до цього:"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, все ще працюють:
kubectl get pods -l app=nginx
Що далі
- Дізнайтеся про власників та залежності у Kubernetes.
- Дізнайтеся про завершувачів в Kubernetes.
- Дізнайтеся про збирання сміття.