Annotation
Annotation,顾名思义,就是注解。Annotation 可以将 Kubernetes 资源对象 关联 到 任意的非标识性元数据
使用客户端(如工具和库)可以检索到这些元数据
关联元数据到对象
Label 和 Annotation 都可以将元数据关联到 Kubernetes 资源对象:
- Label 主要用于选择对象,可以挑选出满足特定条件的对象。annotation 不能用于标识及选择对象
- annotation 中的元数据可多可少,可以是结构化的或非结构化的
- annotation 也可以包含 label 中不允许出现的字符
Annotation 和 label 一样都是 key/value 键值对映射结构:
json"annotations": {"key1":"value1","key2":"value2"}
以下列出了一些可以记录在 annotation 中的对象信息:
声明配置层管理的字段
可以用于区分以下几种配置来源:客户端或服务器设置的默认值,自动生成的字段或自动生成的 auto-scaling 和 auto-sizing 系统配置的字段
创建信息、版本信息或镜像信息
例如时间戳、版本号、git 分支、PR 序号、镜像哈希值以及仓库地址
- 记录日志、监控、分析或审计存储仓库的指针
可以用于 debug 的客户端(库或工具)信息
例如名称、版本和创建信息
用户信息,以及工具或系统来源信息
例如来自非 Kubernetes 生态的相关对象的 URL 信息
轻量级部署工具元数据
例如配置或检查点
负责人的电话或联系方式,或能找到相关信息的目录条目信息
例如团队网站
如果不使用 annotation,也可以将以上类型的信息存放在外部数据库或目录中 但这样做不利于创建用于部署、管理、内部检查的共享工具和客户端库
示例
如 Istio 的 Deployment 配置中就使用到了 annotation:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: istio-manager spec: replicas: 1 template: metadata: annotations: alpha.istio.io/sidecar: ignore labels: istio: manager spec: serviceAccountName: istio-manager-service-account containers: - name: discovery image: harbor-001.jimmysong.io/library/manager:0.1.5 imagePullPolicy: Always args: ["discovery", "-v", "2"] ports: - containerPort: 8080 env: - name: POD_NAMESPACE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.namespace - name: apiserver image: harbor-001.jimmysong.io/library/manager:0.1.5 imagePullPolicy: Always args: ["apiserver", "-v", "2"] ports: - containerPort: 8081 env: - name: POD_NAMESPACE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.namespace
alpha.istio.io/sidecar 注解就是用来 控制 是否 自动向 pod 中注入 sidecar 的