首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Kubernetes IP Masquerade Agent 用户指南
Kubernetes云管理控制器
Kubernetes安全地清空一个节点
Kubernetes保护集群
Kubernetes调试DNS问题
Kubernetes改变默认 StorageClass
Kubernetes更改PersistentVolume的回收策略
Kubernetes关键插件Pod的调度保证
Kubernetes静态加密Secret数据
Kubernetes开发云控制器管理器
Kubernetes控制节点上的CPU管理策略
Kubernetes控制节点上的拓扑管理策略
Kubernetes名字空间演练
Kubernetes配置API对象配额
启用/禁用 Kubernetes API
Kubernetes迁移多副本的控制面
Kubernetes升级集群
Kubernetes声明网络策略
Kubernetes使用CoreDNS进行服务发现
Kubernetes使用KMS驱动进行数据加密
使用Kubernetes API访问集群
Kubernetes使用NUMA感知的内存管理器
Kubernetes通过名字空间共享集群
Kubernetes通过配置文件设置Kubelet参数
为Kubernetes运行etcd集群
Kubernetes为节点发布扩展资源
Kubernetes限制存储使用量
Kubernetes验证已签名容器镜像
以非root用户身份运行Kubernetes节点组件
在Kubernetes集群中使用NodeLocal DNSCache
在Kubernetes集群中使用sysctl
Kubernetes在集群中使用级联删除
在运行中的集群上重新配置节点的 kubelet
Kubernetes自定义DNS服务
Kubernetes自动扩缩集群DNS服务
当前位置:
首页>>
技术小册>>
Kubernetes中文教程(五)
小册名称:Kubernetes中文教程(五)
本页面向你展示如何设置在你的集群执行 时要使用的[级联删除] 类型。 你还需要[创建一个 Deployment 示例] 以试验不同类型的级联删除。你需要为每种级联删除类型来重建 Deployment。 ## 检查 Pod 上的属主引用 检查确认你的 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 ... ``` ## 使用前台级联删除 默认情况下,Kubernetes 使用[后台级联删除] 以删除依赖某对象的其他对象。取决于你的集群所运行的 Kubernetes 版本, 你可以使用 `kubectl` 或者 Kubernetes API 来切换到前台级联删除。 你可以使用 `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" ] ... ``` ## 使用后台级联删除 1. [创建一个 Deployment 示例]。 1. 基于你的集群所运行的 Kubernetes 版本,使用 `kubectl` 或者 Kubernetes API 来删除 Deployment。 你可以使用 `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" } ``` ## 删除属主对象和孤立的依赖对象 默认情况下,当你告诉 Kubernetes 删除某个对象时, 也会删除依赖该对象 的其他对象。 取决于你的集群所运行的 Kubernetes 版本,你也可以使用 `kubectl` 或者 Kubernetes API 来让 Kubernetes *孤立* 这些依赖对象。 **使用 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" ], ... ``` 你可以检查 Deployment 所管理的 Pods 仍然处于运行状态: ```shell kubectl get pods -l app=nginx ``` ## * 了解 Kubernetes 中的[属主与依赖] * 了解 Kubernetes [finalizers] * 了解[垃圾收集].
上一篇:
在Kubernetes集群中使用sysctl
下一篇:
在运行中的集群上重新配置节点的 kubelet
该分类下的相关小册推荐:
Kubernetes中文教程(一)
Kubernetes中文教程(四)
Kubernets合辑2-部署Ingress
Kubernets合辑3-kubernetes介绍
Kubernets合辑7-存储
Kubernets合辑12-配置中心
Kubernets合辑8-权限控制
Kubernets合辑5-Pod控制器
Kubernets合辑11-持续集成
云原生-K8S入门实战
Kubernets合辑13-集群监控
Kubernets合辑9-资源约束