标签管理
-
标签是什么
- 标签(Labels)是附加到Kubernetes对象上的健值对
-
标签的用途
- 标签能够以松散耦合的方式将他们自己的组织结构映射到系统对象,而无需客户端存储这些映射
- 标签可以在创建时附加到对象,也可以在创建后随时添加和修改。标签可以用于组织和选择对象的子集
-
管理标签语法格式
kubectl label 资源类型 [资源名称] [选项/参数]
-
查看标签
kubectl get 资源类型 [资源名称] --show-labels
-
设置标签
kubectl label 资源类型 [资源名称] <label-key>=<label-value>
-
删除标签
kubectl label 资源类型 [资源名称] <label-key>-
-
# 查询资源对象标签
[root@master ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myhttpd 1/1 Running 0 2m34s <none>
[root@master ~]# kubectl get namespaces --show-labels
NAME STATUS AGE LABELS
default Active 3h44m kubernetes.io/metadata.name=default
kube-node-lease Active 3h44m kubernetes.io/metadata.name=kube-node-lease
kube-public Active 3h44m kubernetes.io/metadata.name=kube-public
kube-system Active 3h44m kubernetes.io/metadata.name=kube-system
[root@master ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready control-plane,master 3h44m v1.22.5 kubernetes.io/hostname=master ... ...
node-0001 Ready <none> 3h38m v1.22.5 kubernetes.io/hostname=node-0001 ... ...
node-0002 Ready <none> 3h38m v1.22.5 kubernetes.io/hostname=node-0002 ... ...
node-0003 Ready <none> 3h38m v1.22.5 kubernetes.io/hostname=node-0003 ... ...
# 使用标签过滤资源对象
[root@master ~]# kubectl get nodes -l kubernetes.io/hostname=master
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 3h38m v1.22.5
# 为资源对象添加标签
[root@master ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myhttpd 1/1 Running 0 14m <none>
[root@master ~]# kubectl label pod myhttpd app=apache
pod/myhttpd labeled
[root@master ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myhttpd 1/1 Running 0 14m app=apache
# 删除标签
[root@master ~]# kubectl label pod myhttpd app-
pod/myhttpd labeled
[root@master ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myhttpd 1/1 Running 0 14m <none>
资源文件中配置标签
[root@master ~]# vim myhttpd.yaml
---
kind: Pod
apiVersion: v1
metadata:
name: myhttpd
labels: # 声明标签
app: apache # 标签键值对
spec:
terminationGracePeriodSeconds: 0
restartPolicy: Always
containers:
- name: apache
image: myos:httpd
imagePullPolicy: IfNotPresent
ports:
- protocol: TCP
containerPort: 80
ot@master ~]# kubectl delete -f myhttpd.yaml
pod "myhttpd" deleted
[root@master ~]# kubectl apply -f myhttpd.yaml
pod/myhttpd created
[root@master ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myhttpd 1/1 Running 0 14m app=apache
基于标签的调度
- 标签选择运算符
- 与名称和UID不同,标签不支持唯一性。通常,我们希望许多对象携带相同的标签
- 通过标签选择算符,客户端/用户可以识别一组对象
- 标签选择算符可以由多个需求组成。在多个需求的情况下,必须满足所有要求,相当于逻辑与(&&)运算符
[root@master ~]# kubectl get nodes node-0002 --show-labels
NAME STATUS ROLES AGE VERSION LABELS
node-0002 Ready <none> 3h38m v1.22.5 kubernetes.io/hostname=node-0002 ... ...
[root@master ~]# vim myhttpd.yaml
---
kind: Pod
apiVersion: v1
metadata:
name: myhttpd
labels:
app: apache
spec:
terminationGracePeriodSeconds: 0
restartPolicy: Always
nodeSelector: # 基于节点标签进行调度
kubernetes.io/hostname: node-0002 # 标签
containers:
- name: apache
image: myos:httpd
imagePullPolicy: IfNotPresent
ports:
- protocol: TCP
containerPort: 80
[root@master ~]# kubectl delete -f myhttpd.yaml
pod "myhttpd" deleted
[root@master ~]# kubectl apply -f myhttpd.yaml
pod/myhttpd created
[root@master ~]# kubectl get pods -l app=apache -o wide
NAME READY STATUS RESTARTS AGE IP NODE
myhttpd 1/1 Running 0 9s 10.244.2.4 node-0002