树叶云kubernetes教程:Kubernetes 在集群中使用级联删除

在集群中使用级联删除

本页面向你展示如何设置在你的集群执行垃圾收集 时要使用的级联删除 类型。

在开始之前

你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

  • Katacoda
  • 玩转 Kubernetes

你还需要创建一个 Deployment 示例 以试验不同类型的级联删除。你需要为每种级联删除类型来重建 Deployment。

检查 Pod 上的属主引用 

检查确认你的 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​。

  • Kubernetes 1.20.x 及更新版本
  • 你可以使用 ​kubectl ​或者 Kubernetes API 来基于前台级联删除来删除对象。

    使用 kubectl

    运行下面的命令:

    kubectl delete deployment nginx-deployment --cascade=foreground
    

    使用 Kubernetes API

    1. 启动一个本地代理会话:
    2. kubectl proxy --port=8080
      
    3. 使用 ​curl ​来触发删除操作:
    4. 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 1.20.x 之前的版本
  • 你可以通过调用 Kubernetes API 来基于前台级联删除模式删除对象。

    1. 启动一个本地代理会话:
    2. kubectl proxy --port=8080
      
    3. 使用 ​curl ​来触发删除操作:
    4. 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"
          ]
          ...

使用后台级联删除

  1. 创建一个 Deployment 示例。
  2. 基于你的集群所运行的 Kubernetes 版本,使用 ​kubectl ​或者 Kubernetes API 来删除 Deployment。要检查版本,请输入 ​kubectl version​。
  • Kubernetes 1.20.x 及更新版本
  • 你可以使用 ​kubectl ​或者 Kubernetes API 来执行后台级联删除方式的对象删除操作。

    Kubernetes 默认采用后台级联删除方式,如果你在运行下面的命令时不指定 ​--cascade​ 标志或者 ​propagationPolicy ​参数时,用这种方式来删除对象。

    使用 kubectl

    运行下面的命令:

    kubectl delete deployment nginx-deployment --cascade=background
    

    使用 Kubernetes API

    1. 启动一个本地代理会话:
    2. kubectl proxy --port=8080
      
    3. 使用 ​curl ​来触发删除操作:
    4. 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 1.20.x 之前的版本
  • Kubernetes 默认采用后台级联删除方式,如果你在运行下面的命令时不指定 ​--cascade​ 标志或者 ​propagationPolicy ​参数时,用这种方式来删除对象。

    使用 kubectl

    运行下面的命令:

    kubectl delete deployment nginx-deployment --cascade=true
    

    使用 Kubernetes API

    1. 启动一个本地代理会话:
    2. kubectl proxy --port=8080
      
    3. 使用 ​curl ​来触发删除操作:
    4. 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​。

  • Kubernetes 1.20.x 及更新版本
  • 使用 kubectl

    运行下面的命令:

    kubectl delete deployment nginx-deployment --cascade=orphan
    

    使用 Kubernetes API

    1. 启动一个本地代理会话:
    2. kubectl proxy --port=8080
      
    3. 使用 ​curl ​来触发删除操作:
    4. 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"
      ],
      ...
  • Kubernetes 1.20.x 之前的版本
  • 使用 kubectl

    运行下面的命令:

    kubectl delete deployment nginx-deployment --cascade=orphan
    

    使用 Kubernetes API

    1. 启动一个本地代理会话:
    2. kubectl proxy --port=8080
      
    3. 使用 ​curl ​来触发删除操作:
    4. 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

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/162910.html<

(0)
管理的头像管理
上一篇2025-03-18 22:01
下一篇 2025-03-18 22:02

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注