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

24

我正在努力理解注释和标签之间的区别。

我的理解是,注释是元数据,添加了不能用于Kubernetes识别/过滤资源的键-值对。

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

这个理解正确吗?如果是这样,那么注释的实际用途是什么?与性能有关吗?在标签受到Kubernetes筛选器的监视而注释纯粹用于添加纯信息元数据的情况下,它是否有用?

但是我看到在需要Nginx或入口能力的部署中使用注释。那么这如何搜索或使用。为什么不使用标签呢?

何时使用注释而不是标签,反之亦然?各自的优缺点是什么?

我的理解非常有限,在阅读官方文档后,并没有真正帮助我理解何时使用注释和标签的用例。

5个回答

19

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

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

--《Kubernetes up & running》第6章

标签用于标识资源

标签的应用实例:

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

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

  • 合并和流式传输具有相同标签的各个 pod 的日志

    kubectl logs -l key=val

标签之所以作为选择器而不是注释的原因是,大多数 Kubernetes 实现将标签编入 etcd 中进行索引。

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

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

例如:

  • 最后更新时间
  • 由谁管理
  • 边车注入配置等

另一个重要的区别是,与注释相反,标签的值仅限于63个字符 - Wolfson

9

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

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


8

标签在Etcd中被索引并可以进行搜索。注释则不能。


3

我想分享我的观点,以便更好地理解。

标签 - 与任何K8s对象相关联的键值对。它旨在供开发人员或管理员使用,以选择或过滤对象。

例如:

  • 选择所有带有特定值的Pod并使其停止运行。

注释 - 与任何K8s对象相关联的键值对。这不是开发人员/管理员使用的,也不能查询。它主要由对象用于自我配置。简单来说,就像在Java/Spring应用程序开发中传递一些Spring属性,其中一个Spring bean将使用它来进行自我配置。

例如:

  • 服务帐户要使用的角色
  • Ingress对象要使用的目标类型或端口。

0

标签有额外的限制,如下所述:https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set

有效的标签值:

必须少于63个字符(可以为空),除非为空,必须以字母数字字符([a-z0-9A-Z])开头和结尾,可以包含破折号(-)、下划线(_)、点(.)和字母数字字符。

因此,如果它是一个简单的值,您可以将其设置为标签;如果它是一个URL或更复杂的值,则将其存储为元数据/注释。

标签和注释的搜索语法也不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接