Labels
(标签) 和 Annotations
(注解) 都是将元数据附加到 Kubernetes 中对象的方法,但是你知道这两者之间的区别吗?
下面就来了解下这两个之间的区别吧:
- 「Labels」:
标签
是附加到对象(例如 pod)的键/值
对。标签旨在用于指定对用户有意义和相关的对象的标识属性,但不直接暗示核心系统的语义。标签可用于组织和选择对象的子集。标签可以在创建时附加到对象上,然后随时添加和修改……标签允许高效的查询和观察,非常适合在 UI 和 CLI 中使用。非识别信息应使用Annotations记录。 - 「Annotations」: 注解的定义就非常简单了,它是将任意非标识元数据附加到对象上。比如工具和库之类的客户端可以检索此元数据。
Annotations 和 Labels 之间的实际区别实际上很简单:
Labels
适用于 Kubernetes,而Annotations
适用于人类。
K8s 中的 Labels 是什么?
标签
与选择器
结合使用来标识相关资源组。因为选择器是用来查询标签的,所以这个操作需要高效。为确保高效查询,标签受 RFC 1123[3] 约束。RFC 1123 以及其他约束将标签限制为最大 63
个字符长度。因此,当您希望 Kubernetes 对一组相关资源进行分组时,应该使用标签。
K8s 中的 Annotations 是什么?
Annotations用于非识别信息
,即 Kubernetes 不关心的元数据。因此,注解键和值没有约束。因此,如果您想为其他人添加有关给定资源的信息,则注解是更好的选择。
使用 Annotations 和 Labels 的示例
以下简单示例同时使用 Annotations 和 selector。Annotations 用于添加有关 Kubernetes 面向人类的服务的信息,而 Kubernetes 则不会使用。通常我们可以通过 kubectl
对一个资源对象进行添加一些便于查问题和分析的信息,如:
kubectl annotate svc nginx -n devops kubemaster.top/owner=@marionxue
这样在使用中其实很方便定位和通知相关的工程师,提高问题在团队中排查解决的高效性,当然还可以添加其他的说明信息,如服务的描述信息
,Owner
,沟通channel
,依赖信息
,runbook
等等!
而这些信息,我们可以在kubernetes YAML、Kustomize 模板文件或 Helm Charts 添加,这些信息也当然可以在自动化部署工具中被引用。
下面准备了一个使用Annotation和selector的示例,其中selector用于匹配受控制的Pod,而annotation则是自定义添加的附加信息,K8s并不会用到这个信息。
评论区