目录
1. 标签(Label)是附在kubernetes 对象(如pod,deployment等)上的键值对(key-value),可以在创建时指定,也可以在创建后指定
2. Label 的值本身不具备具体含义,但可以通过 label 来筛选对象特定的子集,便于管理
3. 每一个对象可以有多个标签
对哪一组pod来操作
1. 标签由一组键值对构成
2. Label key的组成:
· Key值必须唯一
· 可以使用前缀,使用 / 分隔,前缀必须是DNS子域(必须带.),不得超过253个字符,系统中的 自动化组件创建的label必须指定前缀,kubernetes.io/ 由kubernetes保留
· 不得超过63个字符
· 起始必须是字母(大小写都可以)或数字,中间可以有连字符,下划线和点
3. Label value 的组成:
· 不得超过63个字符
· 起始必须是字母(大小写都可以)或数字,中间可以有连字符,下划线和点
1. labelpod.yaml 文件创建一个pod
$ vim label-1.yml apiVersion: v1 kind: Pod metadata: name: labelpod labels: app: nginx version: new spec: containers: - name: labelpod image: nginx:1.14.2 ports: - containerPort: 802. 在创建时指定两个label
· app: nginx
· version: new
$ kubectl apply -f label-1.yml
1. 通过命令 --show-label 可以查看指定对象的所有 label(级别相同逗号分隔)
$ kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS labelpod 1/1 Running 0 10s app=nginx,version=new2. 同样可以使用 label 指令在已创建的对象上添加标签
$ kubectl label pods labelpod time=2022 $ kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS labelpod 1/1 Running 0 6m14s app=nginx,time=2022,version=new3. 修改已有key的value值(删除key 或者 --overwrite )
$ kubectl label pods labelpod time=2023 error: 'time' already has a value (2022), and --overwrite is false '使用--overwrite选项覆盖原有的值' kiosk@k8s-master:~$ kubectl label pods labelpod time=2023 --overwrite pod/labelpod labeled kiosk@k8s-master:~$ kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS labelpod 1/1 Running 0 12m app=nginx,time=2023,version=new
$ kubectl label pods labelpod time- #删除标签的key pod/labelpod unlabeled $ kubectl label pods labelpod time=202211 kiosk@k8s-master:~$ kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS labelpod 1/1 Running 0 16m app=nginx,time=202211,version=new
1. 标签不具备唯一性,在通常情况下,多个不同的对象有这相同的标签
2. 通过标签选择器,用户或客户端可以指定批量的对象进行操作。
标签选择器也是 kubernetes 的核心分组方式
3. 目前支持两种标签选择器,
基于等值的(equality-based)
基于集合的(set-based)
Equality-based 标签选择器允许用标签的key 和 value 过滤。
有三种运算符可以使用,分别是'=' , '==' , 和 '!='
前两种运算符同义,代表相等,后一种代表不相等
1. 查看有特定标签的对象
$ kubectl get pods -l time=202211 --show-labels NAME READY STATUS RESTARTS AGE LABELS labelpod 1/1 Running 0 48m app=nginx,time=202211,version=new2. 查看不包括特定标签的对象
$ kubectl get pods -l time!=202211 --show-labels
1. Set-based 的标签条件允许用一组 value 来过滤 key。
支持三种操作符:in,notin 和 exists(仅针对于 key 符号)
2. 两种标签选择器也可以混用,如:
· partition in (customer A,customer B),enviornment != qa
1. 查看对象的清单时,可以选择使用 -L 命令查看标签,或使用 -l 命令筛选对象
2. 查看pod ,并显示app 标签的值
'L选项针对key(app)新增了一列打印出来' $ kubectl get pods --show-labels -L app NAME READY STATUS RESTARTS AGE APP LABELS labelpod 1/1 Running 0 169m nginx app=nginx,time=202211,version=new3. 筛选 pod 中标签为 app=nginx 的 pod
~$ kubectl get pods -l app=nginx NAME READY STATUS RESTARTS AGE labelpod 1/1 Running 0 174m
1. 为 k8s-worker1 打上标签
$ kubectl label nodes k8s-worker1 env=test
2. 查看节点上的 env 标签
$ kubectl get nodes -L env NAME STATUS ROLES AGE VERSION ENV k8s-master Ready control-plane 59d v1.24.1 k8s-worker1 Ready59d v1.24.1 test k8s-worker2 NotReady59d v1.24.1 3. 也可以使用 --show-label 命令查看所有标签
$ kubectl get nodes --show-label
$ kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS k8s-worker1 Ready59d v1.24.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env=test,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-worker1,kubernetes.io/os=linux
1. 编辑 yaml 文件,创建deployment
$ vim deployment_label.yml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 nodeSelector: env: test $ kubectl apply -f deployment_label.yml2.查看pod 所在节点位置,可以看到创建出来的pod 都运行在 k8s-worker1上
$ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deployment-678d4fd6d9-fsrpf 1/1 Running 0 40m 172.16.194.80 k8s-worker1 nginx-deployment-678d4fd6d9-nglxn 1/1 Running 0 40m 172.16.194.87 k8s-worker1 nginx-deployment-678d4fd6d9-rdk8q 1/1 Running 0 40m 172.16.194.81 k8s-worker1
1. 使用集合的方式运行
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: env operator: In values: - test $ kubectl apply -f deployment_label.yml2. 查看 pod 运行节点,依然全部运行在 k8s-worker1 上
$ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deployment-5787cb97df-jwc47 1/1 Running 0 34s 172.16.194.85 k8s-worker1 nginx-deployment-5787cb97df-qn74w 1/1 Running 0 33s 172.16.194.88 k8s-worker1 nginx-deployment-5787cb97df-whxsg 1/1 Running 0 30s 172.16.194.83 k8s-worker1