From 0bf3fedeb99998b0e1bc8aa6247474937256a814 Mon Sep 17 00:00:00 2001 From: Qiming Teng Date: Mon, 3 Jan 2022 13:10:18 +0800 Subject: [PATCH] [zh] Translate cascading deletion task --- .../use-cascading-deletion.md | 532 ++++++++++++++++++ 1 file changed, 532 insertions(+) create mode 100644 content/zh/docs/tasks/administer-cluster/use-cascading-deletion.md diff --git a/content/zh/docs/tasks/administer-cluster/use-cascading-deletion.md b/content/zh/docs/tasks/administer-cluster/use-cascading-deletion.md new file mode 100644 index 0000000000..c2b722ee29 --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/use-cascading-deletion.md @@ -0,0 +1,532 @@ +--- +title: 在集群中使用级联删除 +content_type: task +--- + + + + + + +本页面向你展示如何设置在你的集群执行{{}} +时要使用的[级联删除](/zh/docs/concepts/workloads/controllers/garbage-collection/#cascading-deletion) +类型。 + +## {{% heading "prerequisites" %}} + +{{< include "task-tutorial-prereqs.md" >}} + + +你还需要[创建一个 Deployment 示例](/zh/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment) +以试验不同类型的级联删除。你需要为每种级联删除类型来重建 Deployment。 + + +## 检查 Pod 上的属主引用 {#check-owner-references-on-your-pods} + +检查确认你的 Pods 上存在 `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 使用[后台级联删除](/zh/docs/concepts/workloads/controllers/garbage-collection/#background-deletion) +以删除依赖某对象的其他对象。取决于你的集群所运行的 Kubernetes 版本, +你可以使用 `kubectl` 或者 Kubernetes API 来切换到前台级联删除。 +{{}} + +{{}} +{{% tab name="Kubernetes 1.20.x 及更新版本" %}} + + +你可以使用 `kubectl` 或者 Kubernetes API 来基于前台级联删除来删除对象。 + + +**使用 kubectl** + +运行下面的命令: + + + +```shell +kubectl delete deployment nginx-deployment --cascade=foreground +``` + + +**使用 Kubernetes API** + + +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` {{}}, + 类似这样: + + ``` + "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" + ] + ... + ``` + +{{% /tab %}} +{{% tab name="Kubernetes 1.20.x 之前的版本" %}} + + +你可以通过调用 Kubernetes API 来基于前台级联删除模式删除对象。 + +进一步的细节,可阅读[特定于你的 Kubernetes 版本的文档](/zh/docs/home/supported-doc-versions)。 + + +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` {{}}, + 类似这样: + + ```none + "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" + ] + ... + ``` +{{% /tab %}} +{{}} + + +## 使用后台级联删除 {#use-background-cascading-deletion} + + +1. [创建一个 Deployment 示例](zh/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment)。 +1. 基于你的集群所运行的 Kubernetes 版本,使用 `kubectl` 或者 Kubernetes API 来删除 Deployment。 + {{}} + +{{}} +{{% tab name="Kubernetes 1.20.x 及更新版本" %}} + + +你可以使用 `kubectl` 或者 Kubernetes API 来执行后台级联删除方式的对象删除操作。 + +Kubernetes 默认采用后台级联删除方式,如果你在运行下面的命令时不指定 +`--cascade` 标志或者 `propagationPolicy` 参数时,用这种方式来删除对象。 + + +**使用 kubectl** + +运行下面的命令: + +```shell +kubectl delete deployment nginx-deployment --cascade=background +``` + + +**使用 Kubernetes API** + + +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" + ``` + + + 输出类似于: + + ``` + "kind": "Status", + "apiVersion": "v1", + ... + "status": "Success", + "details": { + "name": "nginx-deployment", + "group": "apps", + "kind": "deployments", + "uid": "cc9eefb9-2d49-4445-b1c1-d261c9396456" + } + ``` +{{% /tab %}} +{{% tab name="Kubernetes 1.20.x 之前的版本" %}} + + +Kubernetes 默认采用后台级联删除方式,如果你在运行下面的命令时不指定 +`--cascade` 标志或者 `propagationPolicy` 参数时,用这种方式来删除对象。 + + +进一步的细节,可阅读[特定于你的 Kubernetes 版本的文档](/zh/docs/home/supported-doc-versions)。 + + +**使用 kubectl** + +运行下面的命令: + +```shell +kubectl delete deployment nginx-deployment --cascade=true +``` + + +**使用 Kubernetes API** + + +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" + ``` + + + 输出类似于: + + ``` + "kind": "Status", + "apiVersion": "v1", + ... + "status": "Success", + "details": { + "name": "nginx-deployment", + "group": "apps", + "kind": "deployments", + "uid": "cc9eefb9-2d49-4445-b1c1-d261c9396456" + } + ``` +{{% /tab %}} +{{}} + + +## 删除属主对象和孤立的依赖对象 {#set-orphan-deletion-policy} + +默认情况下,当你告诉 Kubernetes 删除某个对象时, +{{}} 也会删除依赖该对象 +的其他对象。 +取决于你的集群所运行的 Kubernetes 版本,你也可以使用 `kubectl` 或者 Kubernetes +API 来让 Kubernetes *孤立* 这些依赖对象。{{}} + +{{}} +{{% tab name="Kubernetes 1.20.x 及更新版本" %}} + + +**使用 kubectl** + +运行下面的命令: + +```shell +kubectl delete deployment nginx-deployment --cascade=orphan +``` + + +**使用 Kubernetes API** + + +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":"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" + ], + ... + ``` + +{{% /tab %}} +{{% tab name="Kubernetes 1.20.x 之前的版本" %}} + + +进一步的细节,可阅读[特定于你的 Kubernetes 版本的文档](/zh/docs/home/supported-doc-versions)。 + + +**使用 kubectl** + +运行下面的命令: + +```shell +kubectl delete deployment nginx-deployment --cascade=orphan +``` + + +**使用 Kubernetes API** + + +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":"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" + ], + ... + ``` +{{% /tab %}} +{{}} + + +你可以检查 Deployment 所管理的 Pods 仍然处于运行状态: + +```shell +kubectl get pods -l app=nginx +``` + +## {{% heading "whatsnext" %}} + + +* 了解 Kubernetes 中的[属主与依赖](/zh/docs/concepts/overview/working-with-objects/owners-dependents/) +* 了解 Kubernetes [finalizers](/zh/docs/concepts/overview/working-with-objects/finalizers/) +* 了解[垃圾收集](/zh/docs/concepts/workloads/controllers/garbage-collection/). +