Kubernetes : Annotations

参考文章:
https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
https://kubernetes.io/zh/docs/reference/kubernetes-api/labels-annotations-taints/#failure-domainbetakubernetesiozone
什么是Annotations
Annotations就是注解,Kubernetes Annotations将任何非标识metadata附加到对象。客户端(如工具和库)可以检索此metadata。

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

写法特点:
注释是键/值对。有效的注释键有两个段:可选的前缀和名称,用斜线(/)分隔。名称段是必需的,必须不超过63个字符,以字母数字字符([A-Z0-9A-Z])开头和结尾,中间有破折号(-)、下划线(u)、点(.)和字母数字。前缀是可选的。如果指定,前缀必须是DNS子域:由点(.)分隔的一系列DNS标签,总共不超过253个字符,后跟斜杠(/)。

如果省略前缀,则注释键被假定为用户专用。向最终用户对象添加注释的自动化系统组件(例如kube调度器、kube控制器管理器、kube apiserver、kubectl或其他第三方自动化)必须指定前缀。

kubernetes.io/和k8s.io/前缀是为kubernetes核心组件保留的。

beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/hostname=ip-172-20-114-199.ec2.internal

用法:
annotation和label一样都是key/value键值对映射结构:

"annotations": {
  "key1" : "value1",
  "key2" : "value2"
}

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

如果不使用annotation,可以将以上类型的信息存放在外部数据库或目录中,但这样做不利于创建用于部署、管理、内部检查的共享工具和客户端库。

写法举例
一般pod举例

apiVersion: v1
kind: Pod
metadata:
  name: annotations-demo
  annotations:
    imageregistry: "https://hub.docker.com/"
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
          

istio举例

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 的。

你可能感兴趣的:(kubernetes)