究竟何时将ownerReference的controller字段设置为true?

Lai*_*son 7 kubernetes

我正在写一个Kubernetes控制器。

有人通过创建了自定义资源kubectl apply -f custom-resource.yaml。我的控制器会注意到创建的内容,然后Deployment以某种方式创建一个与自定义资源有关的。

我正在寻找设置DeploymentownerReferences字段的正确方法,以使自定义资源的删除将导致对的删除Deployment。我知道我可以这样做:

ownerReferences:
- kind: <kind from custom resource>
  apiVersion: <apiVersion from custom resource>
  uid: <uid from custom resource>
  controller: <???>
Run Code Online (Sandbox Code Playgroud)

我这是否是情况下我会成立不清楚controllertrue

Kubernetes参考文档说(全部):

如果为true,则此引用指向管理控制器。

考虑到一个控制器运行的代码,而实际上业主参考通过匹配引用另一个Kubernetes资源uidnamekindapiVersion领域,这种说法是荒谬的:一个Kubernetes对象引用不能“点”的代码。

Deployment有种感觉,文档作者试图以我的示例表示,因为用户没有直接创建自己,所以应该用某种标记来标记该标记,以指示由控制器创建了该标记。

那是对的吗?

当然,下面的问题是:好的,如果controller设置为false此处,行为会发生什么变化,但其他ownerReference字段的设置如上?

fis*_*man 8

ownerReferences 有两个目的:

  • 垃圾回收:参考ymmt2005的回答。基本上所有所有者都会考虑 GC。相反的是接受的答案controller场对GC没有影响。
  • 采用:该controller字段可防止争夺要采用的资源。考虑一个副本集。通常,副本集控制器创建 pod。但是,如果有一个与标签选择器匹配的 pod,它将被副本集采用。为了防止两个副本集争夺同一个 Pod,后者通过设置为controller来获得一个唯一的控制器true。如果一个资源已经有一个控制器,它就不会被另一个控制器采用。详细信息在设计方案中

TLDR:该字段controller仅用于采用而不是 GC。

  • “controller”不是对象本身的属性,而是所有者引用的属性。它告诉您*这个*所有者是否也是该对象的控制者。 (3认同)
  • 我认为这应该被接受的答案。 (2认同)