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

问题描述

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

我对注解的理解是元数据添加了 Kubernetes 无法用于识别/过滤资源的键值对。

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

这样对吗?如果是这样,那么注释的实际用途是什么?和性能有关系吗? Kubernetes 的过滤器和注释扫描器下的标签纯粹用于添加仅提供信息的元数据吗?

但我已经看到部署需要 Nginx 或使用注释的入口功能的情况。那么如何搜索或使用它。为什么这里不使用标签

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

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

解决方法

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

另一方面,注解提供了一种存储机制 类似于标签:注释是设计用来保存的键/值对 可以被工具和工具利用的非识别信息 图书馆。

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

标签用于识别资源

标签可以做什么的示例:

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

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

  • 合并和流式传输共享相同标签的各种 Pod 的日志

    kubectl logs -l key=val

将标签用作选择器而不是注释的原因是因为 etcd 中的大多数 Kubernetes 实现索引标签。

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

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

示例:

  • 最后更新
  • 管理
  • sidecar 注入配置等
,

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

,

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

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