website/content/ja/docs/tasks/administer-cluster/use-cascading-deletion.md

195 lines
7.2 KiB
Markdown

---
title: クラスターでカスケード削除を使用する
content_type: task
weight: 360
---
<!--overview-->
このページでは、{{<glossary_tooltip text="ガベージコレクション" term_id="garbage-collection">}}中にクラスターで使用する[カスケード削除](/ja/docs/concepts/architecture/garbage-collection/#cascading-deletion)のタイプを指定する方法を示します。
## {{% heading "prerequisites" %}}
{{< include "task-tutorial-prereqs.md" >}}
また、さまざまな種類のカスケード削除を試すために、[サンプルのDeploymentを作成する](/ja/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment)必要があります。 タイプごとにDeploymentを再作成する必要があります。
## Podのオーナーリファレンスを確認する {#check-owner-references-on-your-pods}
Podに`ownerReferences`フィールドが存在することを確認します:
```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は[バックグラウンドカスケード削除](/ja/docs/concepts/architecture/garbage-collection/#background-deletion)を使用して、オブジェクトの依存関係を削除します。
クラスターが動作しているKubernetesのバージョンに応じて、`kubectl`またはKubernetes APIのいずれかを使用して、フォアグラウンドカスケード削除に切り替えることができます。 {{<version-check>}}
`kubectl`またはKubernetes APIを使用して、フォアグラウンドカスケード削除を使用してオブジェクトを削除することができます。
**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
```
**Kubernetes APIを使用する**
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":"Foreground"}' \
-H "Content-Type: application/json"
```
出力には、次のように`foregroundDeletion`{{<glossary_tooltip text="ファイナライザー" term_id="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"
]
...
```
## バッググラウンドカスケード削除を使用する {#use-background-cascading-deletion}
1. [サンプルのDeploymentを作成する](/ja/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment)。
1. クラスターが動作しているKubernetesのバージョンに応じて、`kubectl`またはKubernetes APIのいずれかを使用してDeploymentを削除します。{{<version-check>}}
`kubectl`またはKubernetes APIを使用して、バックグラウンドカスケード削除を使用してオブジェクトを削除できます。
Kubernetesはデフォルトでバックグラウンドカスケード削除を使用し、`--cascade`フラグまたは`propagationPolicy`引数なしで以下のコマンドを実行した場合も同様です。
**kubectlを使用する**
以下のコマンドを実行してください:
```shell
kubectl delete deployment nginx-deployment --cascade=background
```
**Kubernetes APIを使用する**
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":"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"
}
```
## オーナーオブジェクトの削除と従属オブジェクトの孤立 {#set-orphan-deletion-policy}
デフォルトでは、Kubernetesにオブジェクトの削除を指示すると、{{<glossary_tooltip text="コントローラー" term_id="controller">}}は従属オブジェクトも削除します。クラスターが動作しているKubernetesのバージョンに応じて、`kubectl`またはKubernetes APIを使用して、これらの従属オブジェクトをKubernetesで*orphan*にすることができます。{{<version-check>}}
**kubectlを使用する**
以下のコマンドを実行してください:
```shell
kubectl delete deployment nginx-deployment --cascade=orphan
```
**Kubernetes APIを使用する**
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"
```
出力には、次のように`finalizers`フィールドに`orphan`が含まれます。
```
"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"
],
...
```
Deploymentによって管理されているPodがまだ実行中であることを確認できます。
```shell
kubectl get pods -l app=nginx
```
## {{% heading "whatsnext" %}}
* Kubernetesの[オーナーと従属](/ja/docs/concepts/overview/working-with-objects/owners-dependents/)について学ぶ。
* Kubernetes [ファイナライザー(Finalizers)](/ja/docs/concepts/overview/working-with-objects/finalizers/)について学ぶ。
* [ガベージコレクション](/ja/docs/concepts/architecture/garbage-collection/)について学ぶ。