之间有什么区别。Kubernetes 中的注释和标签?

Vip*_*non 25 deployment admin kubernetes devops kubernetes-apiserver

我试图理解注释和标签之间的区别。

我对注释的理解是,它是添加键值对的元数据,Kubernetes 无法使用这些元数据来识别/过滤资源。

另一方面,标签是 Kubernetes 可以用来识别/过滤资源的元数据键值对。

这是正确的吗?如果是这样,那么注解的实际用途是什么?跟性能有关系吗?标签在 Kubernetes 扫描仪的过滤器和注释下的位置纯粹是为了添加仅供参考的元数据?

但我见过部署需要 Nginx 或使用注释的入口功能的情况。那么它是如何被搜索或使用的呢?为什么这里不使用标签呢?

我们什么时候在标签上使用注释,反之亦然?各自的优点和缺点是什么?

我的理解相当有限,但是阅读官方文档并没有真正帮助我理解何时使用注释和标签的用例。

kir*_*nee 20

标签是可以附加到 Kubernetes 对象(例如 Pod 和 ReplicaSet)的键/值对。它们可以是任意的,并且对于将识别信息附加到 Kubernetes 对象非常有用。标签为对象分组提供了基础。

另一方面,注释提供了一种类似于标签的存储机制:注释是键/值对,旨在保存可由工具和库利用的非识别信息。

-- Kubernetes 启动和运行,第 6 章

标签用于标识资源

标签功能的示例:

  • 查找所有具有与该键关联的值的 pod

    kubectl get pods -l key=val,key2=val2

  • 合并并流式传输共享相同标签的各个 pod 的日志

    kubectl logs -l key=val

之所以使用标签作为选择器而不是注释,是因为大多数 Kubernetes 在 etcd 中实现索引标签。

注释用于存储有关资源本身的数据

这通常由机器生成的数据组成,甚至可以以 JSON 形式存储。

例子:

  • 最近更新时间
  • 管理者
  • Sidecar注入配置等


Bur*_*dar 9

标签是分配给对象用于识别目的的元数据。例如,服务使用 Pod 上的标签选择后端 Pod。

注释是可以是开放式的附加元数据。它可以用于文档目的,也可以用于配置对象。例如,Nginx 入口控制器读取正在运行的 pod 上的这些注释,并使用它们来配置底层 NGinx 实例。如何使用注释完全取决于实现。


cod*_*ger 8

标签在 Etcd 中建立索引并可以搜索。注释不能。