侧边栏壁纸
博主头像
汪洋

即使慢,驰而不息,纵会落后,纵会失败,但一定可以达到他所向的目标。 - 鲁迅

  • 累计撰写 192 篇文章
  • 累计创建 74 个标签
  • 累计收到 120 条评论

确定 k8s 的 Annotation 与 Labels 你用对了?

汪洋
2021-08-23 / 0 评论 / 1 点赞 / 995 阅读 / 1,166 字

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等等!
截屏20210823 21.08.24.png
而这些信息,我们可以在kubernetes YAML、Kustomize 模板文件或 Helm Charts 添加,这些信息也当然可以在自动化部署工具中被引用。

下面准备了一个使用Annotation和selector的示例,其中selector用于匹配受控制的Pod,而annotation则是自定义添加的附加信息,K8s并不会用到这个信息。

截屏20210823 21.08.29.png

0

评论区