1、Label

1.1 基本理论

标签(Labels) 是附加到 Kubernetes 对象(比如 Pods)上的键值对。 标签旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。 标签可以用于组织和选择对象的子集。标签可以在创建时附加到对象,随后可以随时添加和修改。 每个对象都可以定义一组键/值标签。每个键对于给定对象必须是唯一的。

  1. "metadata": {
  2. "labels": {
  3. "key1" : "value1",
  4. "key2" : "value2"
  5. }
  6. }

1.2 命令行创建带标签的POD

  1. [root@clientvm ~]# kubectl create namespace mytest
  2. namespace/mytest created
  3. [root@clientvm ~]#
  4. [root@clientvm ~]# kubectl run labelpod --image=nginx --labels="app=myweb,env=prod" -n mytest
  5. pod/labelpod created
  6. [root@clientvm ~]# kubectl get -n mytest pod
  7. NAME READY STATUS RESTARTS AGE
  8. labelpod 1/1 Running 0 2m2s

1.3 查看pod的标签

  1. [root@clientvm ~]# kubectl get -n mytest pod --show-labels
  2. NAME READY STATUS RESTARTS AGE LABELS
  3. labelpod 1/1 Running 0 2m28s app=myweb,env=prod

1.4 为pod添加新标签

  1. [root@clientvm ~]# kubectl label pod labelpod version=v1 -n mytest
  2. pod/labelpod labeled
  3. [root@clientvm ~]# kubectl get -n mytest pod --show-labels
  4. NAME READY STATUS RESTARTS AGE LABELS
  5. labelpod 1/1 Running 0 2m50s app=myweb,env=prod,version=v1

1.5 删除pod标签

  1. [root@clientvm ~]# kubectl label pod labelpod version- -n mytest
  2. pod/labelpod labeled
  3. [root@clientvm ~]# kubectl get -n mytest pod --show-labels
  4. NAME READY STATUS RESTARTS AGE LABELS
  5. labelpod 1/1 Running 0 3m27s app=myweb,env=prod

1.6 使用yaml文件创建带标签的Pod

创建yaml文件

  1. [root@clientvm ~]# kubectl run labelpod-yaml --image=nginx --labels="app=myweb,env=prod" -n mytest --dry-run=client -o yaml >labelpod.yaml
  2. [root@clientvm ~]# vim labelpod.yaml
  3. [root@clientvm ~]# cat labelpod.yaml
  4. apiVersion: v1
  5. kind: Pod
  6. metadata:
  7. labels:
  8. app: myweb
  9. env: prod
  10. name: labelpod-yaml
  11. namespace: mytest
  12. spec:
  13. containers:
  14. - image: nginx
  15. name: labelpod-yaml
  16. dnsPolicy: ClusterFirst
  17. restartPolicy: Always

创建Pod

  1. [root@clientvm ~]# kubectl apply -f labelpod.yaml
  2. pod/labelpod-yaml created
  3. [root@clientvm ~]# kubectl get pod -n mytest --show-labels
  4. NAME READY STATUS RESTARTS AGE LABELS
  5. labelpod 1/1 Running 0 15m app=myweb,env=prod
  6. labelpod-yaml 1/1 Running 0 89s app=myweb,env=prod

1.7 标签选择器—selector

-L 查看指定标签的值
-l 查看符合标签的对象

  1. [root@clientvm ~]# kubectl label pod labelpod version=v1 -n mytest
  2. pod/labelpod labeled
  3. [root@clientvm ~]# kubectl get pod -l version=v1 -n mytest
  4. NAME READY STATUS RESTARTS AGE
  5. labelpod 1/1 Running 0 18m
  6. [root@clientvm ~]# kubectl get pod -l version=v1 -n mytest -L app
  7. NAME READY STATUS RESTARTS AGE APP
  8. labelpod 1/1 Running 0 19m myweb
  9. [root@clientvm ~]# kubectl get pod -l version!=v1 -n mytest -L app
  10. NAME READY STATUS RESTARTS AGE APP
  11. labelpod-yaml 1/1 Running 0 7m34s myweb

2、Annotation

2.1 理论基础

你可以使用标签或注解将元数据附加到 Kubernetes 对象。 标签可以用来选择对象和查找满足某些条件的对象集合。 相反,注解不用于标识和选择对象。 注解中的元数据,可以很小,也可以很大,可以是结构化的,也可以是非结构化的,能够包含标签不允许的字符。
注解和标签一样,是键/值对:

  1. "metadata": {
  2. "annotations": {
  3. "key1" : "value1",
  4. "key2" : "value2"
  5. }
  6. }

以下是一些例子,用来说明哪些信息可以使用注解来记录:

  • 声明性配置所管理的字段。 将这些字段附加为注解,能够将它们与客户端或服务端设置的默认值、 自动生成的字段以及通过自动调整大小或自动伸缩系统设置的字段区分开来。
  • 构建、发布或镜像信息(如时间戳、发布 ID、Git 分支、PR 数量、镜像哈希、仓库地址)。
  • 指向日志记录、监控、分析或审计仓库的指针。
  • 可用于调试目的的客户端库或工具信息:例如,名称、版本和构建信息。
  • 用户或者工具/系统的来源信息,例如来自其他生态系统组件的相关对象的 URL。
  • 轻量级上线工具的元数据信息:例如,配置或检查点。
  • 负责人员的电话或呼机号码,或指定在何处可以找到该信息的目录条目,如团队网站。
  • 从用户到最终运行的指令,以修改行为或使用非标准功能。

    2.2 查看Annotation

    ``` [root@clientvm ~]# kubectl describe nodes master.example.com | more Name: master.example.com Roles: master Labels: beta.kubernetes.io/arch=amd64
    1. beta.kubernetes.io/os=linux
    2. kubernetes.io/arch=amd64
    3. kubernetes.io/hostname=master.example.com
    4. kubernetes.io/os=linux
    5. node-role.kubernetes.io/master=
    Annotations: flannel.alpha.coreos.com/backend-data: {“VNI”:1,”VtepMAC”:”5e:48:c6:73:ac:7c”}
    1. flannel.alpha.coreos.com/backend-type: vxlan
    2. flannel.alpha.coreos.com/kube-subnet-manager: true
    3. flannel.alpha.coreos.com/public-ip: 192.168.241.129
    4. kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
    5. node.alpha.kubernetes.io/ttl: 0
    6. volumes.kubernetes.io/controller-managed-attach-detach: true
  1. <a name="02RiN"></a>
  2. ## 2.3 添加Annotation

[root@clientvm ~]# kubectl annotate nodes master.example.com disk=ssd node/master.example.com annotated [root@clientvm ~]# kubectl describe nodes master.example.com | grep disk Annotations: disk: ssd

  1. <a name="5wrob"></a>
  2. ## 2.4 删除Annotation

[root@clientvm ~]# kubectl annotate nodes master.example.com disk- node/master.example.com annotated ```