Annotation

    Label和Annotation都可以将元数据关联到Kubernetes资源对象。Label主要用于选择对象,可以挑选出满足特定条件的对象。相比之下,annotation 不能用于标识及选择对象。annotation中的元数据可多可少,可以是结构化的或非结构化的,也可以包含label中不允许出现的字符。

    以下列出了一些可以记录在 annotation 中的对象信息:

    • 声明配置层管理的字段。使用annotation关联这类字段可以用于区分以下几种配置来源:客户端或服务器设置的默认值,自动生成的字段或自动生成的 auto-scaling 和 auto-sizing 系统配置的字段。
    • 创建信息、版本信息或镜像信息。例如时间戳、版本号、git分支、PR序号、镜像哈希值以及仓库地址。
    • 记录日志、监控、分析或审计存储仓库的指针
    • 可以用于debug的客户端(库或工具)信息,例如名称、版本和创建信息。
    • 用户信息,以及工具或系统来源信息、例如来自非Kubernetes生态的相关对象的URL信息。
    • 轻量级部署工具元数据,例如配置或检查点。
    • 负责人的电话或联系方式,或能找到相关信息的目录条目信息,例如团队网站。

    示例

    如 Istio 的 Deployment 配置中就使用到了 annotation:

    1. kind: Deployment
    2. metadata:
    3. name: istio-manager
    4. spec:
    5. replicas: 1
    6. metadata:
    7. annotations:
    8. alpha.istio.io/sidecar: ignore
    9. labels:
    10. istio: manager
    11. spec:
    12. containers:
    13. - name: discovery
    14. image: harbor-001.jimmysong.io/library/manager:0.1.5
    15. imagePullPolicy: Always
    16. args: ["discovery", "-v", "2"]
    17. ports:
    18. - containerPort: 8080
    19. env:
    20. valueFrom:
    21. fieldRef:
    22. apiVersion: v1
    23. - name: apiserver
    24. image: harbor-001.jimmysong.io/library/manager:0.1.5
    25. imagePullPolicy: Always
    26. args: ["apiserver", "-v", "2"]
    27. ports:
    28. - containerPort: 8081
    29. env:
    30. - name: POD_NAMESPACE
    31. valueFrom:
    32. fieldRef:
    33. apiVersion: v1