4 Label与Annotation

Label

基本理论

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

"metadata": {
  "labels": {
    "key1" : "value1",
    "key2" : "value2"
  }
}

命令行创建带标签的POD

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

查看pod的标签

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

为pod添加新标签

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

删除pod标签

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

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

创建yaml文件

[root@clientvm ~]# kubectl run labelpod-yaml --image=nginx --labels="app=myweb,env=prod" -n mytest --dry-run=client  -o yaml >labelpod.yaml

[root@clientvm ~]# vim labelpod.yaml
[root@clientvm ~]# cat labelpod.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: myweb
    env: prod
  name: labelpod-yaml
  namespace: mytest
spec:
  containers:
  - image: nginx
    name: labelpod-yaml
  dnsPolicy: ClusterFirst
  restartPolicy: Always

创建Pod

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

标签选择器–selector

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

[root@clientvm ~]# kubectl label pod labelpod version=v1 -n mytest
pod/labelpod labeled
[root@clientvm ~]# kubectl get pod -l version=v1 -n mytest
NAME       READY   STATUS    RESTARTS   AGE
labelpod   1/1     Running   0          18m

[root@clientvm ~]# kubectl get pod -l version=v1 -n mytest -L app
NAME       READY   STATUS    RESTARTS   AGE   APP
labelpod   1/1     Running   0          19m   myweb

[root@clientvm ~]# kubectl get pod -l version!=v1 -n mytest -L app
NAME            READY   STATUS    RESTARTS   AGE     APP
labelpod-yaml   1/1     Running   0          7m34s   myweb

Annotation

理论基础

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

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

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

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

查看Annotation

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

添加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

删除Annotation

[root@clientvm ~]# kubectl annotate nodes master.example.com disk-
node/master.example.com annotated
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值