这里填写标题
1. 确定 k8s 的 Annotation 与 Labels 你用对了?
Labels
(标签)和 Annotations
(注解)都是将元数据附加到 Kubernetes 中对象的方法, 但是你知道这两者之间的区别吗?
下面就来了解下这两个之间的区别吧:
- Labels: 标签是附加到对象(例如 pod) 的键/值对。标签旨在用于指定对用户有意义和相关的对象的标识属性, 但不直接暗示核心系统的语义。标签可用于组织和选择对象的子集。标签可以在创建时附加到对象上, 然后随时添加和修改……标签允许高效的查询和观察, 非常适合在 UI 和 CLI 中使用。非识别信息应使用 Annotations[2] 记录。
- Annotations: 注解的定义就非常简单了, 它是将任意非标识元数据附加到对象上。比如工具和库之类的客户端可以检索此元数据。
Annotations 和 Labels 之间的实际区别实际上很简单:
Labels 适用于 Kubernetes, 而 Annotations 适用于人类。
1.1. K8s 中的 Labels 是什么?
标签与选择器结合使用来标识相关资源组。因为选择器是用来查询标签的, 所以这个操作需要高效。为确保高效查询, 标签受 RFC 1123 约束。RFC 1123 以及其他约束将标签限制为最大 63 个字符长度。因此, 当您希望 Kubernetes 对一组相关资源进行分组时, 应该使用标签。
1.2. K8s 中的 Annotations 是什么?
Annotations 用于非识别信息, 即 Kubernetes 不关心的元数据。因此, 注解键和值没有约束。因此, 如果您想为其他人添加有关给定资源的信息, 则注解是更好的选择。
1.3. 使用 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 添加, 这些信息也当然可以在自动化部署工具中被引用。