【问题标题】:What is the difference between crd.yaml and crd-status-subresource.yaml?crd.yaml 和 crd-status-subresource.yaml 有什么区别?
【发布时间】:2021-05-23 00:06:34
【问题描述】:

我是自定义控制器的新手,并试图理解这一点。我已经开始参考示例控制器,但在示例文件之间找不到太多差异或无法正确理解

  1. https://github.com/kubernetes/sample-controller/blob/master/artifacts/examples/crd.yaml
  2. https://github.com/kubernetes/sample-controller/blob/master/artifacts/examples/crd-status-subresource.yaml

除了 crd-status-subresource.yaml 中的以下部分之外,这两个文件看起来都与我相似。

subresources:
  status: {}

任何人都可以对此提供帮助或提出建议以继续进行。 ?

【问题讨论】:

  • Status subresource 上的 Kubernetes 文档是否足以作为起点?
  • @DavidMaze 嗨,感谢您提及此内容,但根据文档,似乎在 crd-status-subresources.yaml 中启用了子资源状态,但在 crd.yaml 中未启用。还有其他区别吗?

标签: kubernetes kubernetes-custom-resources


【解决方案1】:

为了在同一个页面上,这里是 Kubernetes 中控制器功能的快速摘要:

它监视某个状态 - 通常是可以使用 CustomResourceDefinitions (CRD) 定义的 CustomResources (CRs) - 并根据您在代码中定义的规则执行操作。

我已经开始参考示例控制器,但在示例文件之间找不到太多差异或无法正确理解

您所指的文件与您已经指出的内容没有任何区别,因此确实没有什么可寻找的。​​p>

如果您仔细查看原生 Kubernetes 对象,例如 Pod (kubectl get pod <some-pod> -o yaml),您会发现它有一个 .status 字段,它只是存储了额外的信息。通过启用 status 子资源,您告诉 Kubernetes 创建一个 CR,然后您可以继续并通过访问新的 REST API 路径:/apis/<group>/<version-name>/namespaces/*/<kind>/status 来编辑附加的 .status 字段。如果你不需要它,那就不要定义它,就是这样。

为什么要添加status 子资源取决于CR 的用例。有时您只是想要一个更详细的字段来存储信息以供用户查看,有时您会告诉控制器从那里获取数据,因为它代表了对象的当前状态。只需查看 Pods .status 字段,您就会在其中看到一些不错的附加数据,例如 Pod 是否为 Ready、有关容器的信息等等。

话虽如此,status 并不是唯一的子资源。您可能还想查看scale 子资源(取决于用例)。更多关于子资源的信息可以参考:https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#subresources

【讨论】:

    猜你喜欢
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    相关资源
    最近更新 更多