一、标签如何使用¶
关于标签的使用,大概分为四方面:增、删、改、查。
1.1 增¶
修改node节点k8s-node02的label为region=subnet7
[root@k8s-master01 practice]# kubectl label node k8s-node02 region=subnet7
1.2 删¶
单个去除node节点k8s-node02的label:region=subnet7
[root@k8s-master01 practice]# kubectl label node k8s-node02 region-
批量删除符合标签选择器条件的所有节点的标签
[root@k8s-master01 practice]# kubectl label node -l region region-
1.3 改¶
单个修改node节点k8s-node02的label:region=subnet120
[root@k8s-master01 practice]# kubectl label node k8s-node02 region=subnet120 --overwrite
批量修改符合标签选择器条件的所有节点的标签
[root@k8s-master01 practice]# kubectl get node -l region region=subnet120 --overwrite
1.4 查¶
查看单个节点的标签
[root@k8s-master01 practice]# kubectl get node k8s-node02 --show-labels
k8s-node02 Ready <none> 6d5h v1.23.14 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node02,kubernetes.io/os=linux,region=subnet7
查看所有节点的标签
[root@k8s-master01 practice]# kubectl get node --show-labels
筛选节点标签含region的节点
[root@k8s-master01 practice]# kubectl get node --show-labels | grep region
选择匹配 region 为subnet7 的 node
[root@k8s-master01 practice]# kubectl get node -l 'region in (subnet7)' --show-labels
选择匹配 app 为 details 或者 productpage 的 Service
kubectl get svc -l 'app in (details,productpage)' --show-labels
选择 app 为 productpage 或 reviews 但不包括 version=v1 的 svc
kubectl get svc -l version!=v1,'app in (details,productpage)' --show-labels
选择 label 的 key 名为 app 的 svc
kubectl get svc -l app --show-labels
二、标签如何结合标签选择器使用¶
nodeSelector 是节点选择约束的最简单推荐形式。你可以将 nodeSelector 字段添加到 Pod 的规约中设置你希望目标节点所具有的节点标签。 Kubernetes 只会将 Pod 调度到拥有你所指定的每个标签的节点上。
下面以一个具体的示例进行演示:
1.修改node节点k8s-node02的label为region=subnet7
[root@k8s-master01 practice]# kubectl label node k8s-node02 region=subnet7
node/k8s-node02 labeled
2.筛选标签为region=subnet7的节点
[root@k8s-master01 practice]# kubectl get no -l region=subnet7
NAME STATUS ROLES AGE VERSION
k8s-node02 Ready <none> 6d3h v1.23.14
3.在 Deployment 控制器添加标签指定将 Pod 部署到带标签的节点上
[root@k8s-master01 practice]# cat nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
nodeSelector:
region: subnet7
containers:
- image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
name: nginx
resources: {}
status: {}
4.查看pod部署节点,观察到都已部署到k8s-node02节点上
[root@k8s-master01 calico]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-66c66889f4-4clxn 1/1 Running 0 70m 172.27.14.196 k8s-node02 <none> <none>
nginx-66c66889f4-mncsm 1/1 Running 0 70m 172.27.14.193 k8s-node02 <none> <none>
nginx-66c66889f4-vssf5 1/1 Running 0 70m 172.27.14.197 k8s-node02 <none> <none>