本页面向你展示如何设置在你的集群执行垃圾收集 时要使用的级联删除 类型。
你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:
你还需要创建一个 Deployment 示例 以试验不同类型的级联删除。你需要为每种级联删除类型来重建 Deployment。
检查确认你的 Pods 上存在 ownerReferences
字段:
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 使用后台级联删除 以删除依赖某对象的其他对象。取决于你的集群所运行的 Kubernetes 版本, 你可以使用 kubectl 或者 Kubernetes API 来切换到前台级联删除。要检查版本,请输入 kubectl version
。
你可以使用 kubectl
或者 Kubernetes API 来基于前台级联删除来删除对象。
使用 kubectl
运行下面的命令:
kubectl delete deployment nginx-deployment --cascade=foreground
使用 Kubernetes API
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"
]
...
你可以通过调用 Kubernetes API 来基于前台级联删除模式删除对象。
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"
]
...
kubectl
或者 Kubernetes API 来删除 Deployment。要检查版本,请输入 kubectl version
。你可以使用 kubectl
或者 Kubernetes API 来执行后台级联删除方式的对象删除操作。
Kubernetes 默认采用后台级联删除方式,如果你在运行下面的命令时不指定 --cascade
标志或者 propagationPolicy
参数时,用这种方式来删除对象。
使用 kubectl
运行下面的命令:
kubectl delete deployment nginx-deployment --cascade=background
使用 Kubernetes API
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 默认采用后台级联删除方式,如果你在运行下面的命令时不指定 --cascade
标志或者 propagationPolicy
参数时,用这种方式来删除对象。
使用 kubectl
运行下面的命令:
kubectl delete deployment nginx-deployment --cascade=true
使用 Kubernetes API
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 删除某个对象时, 控制器 也会删除依赖该对象 的其他对象。 取决于你的集群所运行的 Kubernetes 版本,你也可以使用 kubectl
或者 Kubernetes API 来让 Kubernetes 孤立 这些依赖对象。要检查版本,请输入 kubectl version
。
使用 kubectl
运行下面的命令:
kubectl delete deployment nginx-deployment --cascade=orphan
使用 Kubernetes API
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"
输出中在 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"
],
...
使用 kubectl
运行下面的命令:
kubectl delete deployment nginx-deployment --cascade=orphan
使用 Kubernetes API
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"
输出中在 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 所管理的 Pods 仍然处于运行状态:
kubectl get pods -l app=nginx
配置API对象配额本文讨论如何为API对象配置配额,包括PersistentVolumeClaim和Service。配额限制了可以在命名空间中创建的特定类...
使用 Kustomize 对 Kubernetes 对象进行声明式管理Kustomize是一个独立的工具,用来通过kustomization 文件定制 Kubernetes对象...
Docker build 命令Docker 命令大全docker build : 使用Dockerfile创建镜像。语法docker build [OPTIONS] PATH | URL | -OPTIONS...
要求OS X - 当前仅支持 OS X推荐使用Homebrew的方式来安装 nvm,watchman 和 flow。安装Node.js4.0 或者更新的版本。使用 Homebr...
这里有很多本地的 UI 部件准备被用到最新的应用程序中 - 其中一些是平台的一部分,其他的部分可以作为第三方库来使用,而且仍然...
jQuery [attribute^=value] 选择器 jQuery 选择器实例选取所有带有以 "nation" 开头的 name 属性的 input 元素:$("input[name^=...
jQuery Mobile 图标 我们可以使用图标类在 jQuery Mobile 中 a 和 button 元素上添加图标。 jQuery 图标 在 jQuery Mobile 中,...
以下列表包含一些关键资源:Resource Type: ColorsLocation:/res/values/any-fileResource Type: StringsLocation:/res/values/a...