说明:完整的k8s教程可访问:https://blog.tag.gg/showinfo-3-36255-0.html
什么是标签选择器。
在Pod对象创建的时候,运行在我们指定的节点上。在Pod对象的spec字段中,有nodeName和nodeSelector两个属性 。
在Kubernetes集群中,每个结点都会有自己的标签,该标签与该节点的操作系统、基本属性有关。执行命令:
可以查看Kubernetes集群中的Node节点以及节点标签:执行结果:kubectl get nodes --show-labels
同样的,我们也可以给指定节点添加标签,该操作也会使用kubectl kube命令,命令格式如下:[root@master ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready control-plane,master 2d5h v1.23.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
node1 Ready <none> 2d5h v1.23.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
node2 Ready <none> 2d5h v1.23.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux
或kubectl label nodes/【节点名】 【标签键】=【标签值】
执行命令:kubectl label nodes 【节点名】 【标签键】=【标签值】
kubectl label nodes/node2 mem=big
或
说明“标签键”可以根据自己情况任意指定,比如执行如下命令也可以创建标签kubectl label nodes node2 mem=big
可以给Kubernetes集群中的node2节点添加mem=bigggg的标签,该命令执行结果如下所示:kubectl label node node3 dev_role=ceshi2
查看节点情况[root@master ~]# kubectl label nodes/node2 mem=bigggg
node/node2 labeled
执行后如下:kubectl get nodes --show-labels
如何添加、修改、删除、查询节点标签[root@master ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready control-plane,master 2d5h v1.23.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
node1 Ready <none> 2d5h v1.23.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
node2 Ready <none> 2d5h v1.23.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux,mem=bigggg
1、添加节点标签:
2、删除节点标签:kubectl label nodes/node2 mem=big #mem是标签健,可以随意起名,,big是设置的标签名,根据自己情况起名。
返回结果:kubectl label nodes node1 mem- #输入标签健名即可
3、修改节点标签:[root@master ~]# kubectl label nodes node1 mem-
node/node1 unlabeled
修改一个label的值,需要加上--overwrite参数:
结果:kubectl label nodes node1 mem=ceshi --overwrite
4、查看节点标签:[root@master ~]# kubectl label nodes node2 mem=ceshi --overwrite
node/node2 unlabeled
查看所有节点标签
查看某一个节点标签:该命令也可以查看该节点的所有信息包括cpu内存等。kubectl get nodes --show-labels
kubectl describe nodes node2
节点选择器应用
下面,我们就使用节点选择器,来控制Pod对象运行的节点。我们创建一个Pod对象的资源清单
在该资源清单的spec模块下,我们使用了nodeSelector节点选择器,并选择了mem=big节点。apiVersion: v1
kind: Pod
metadata:
name: pod-demo-test
namespace: default
labels:
label1: mypod1
label2: mypod2
spec:
containers:
- name: busybox
image: busybox
command:
- "/bin/sh"
- "-c"
- "sleep 7200"
nodeSelector:
mem: big
资源清单创建完毕后,我们执行命令:
按照资源清单的配置完成Pod对象的创建,该命令执行结果如下:kubectl create -f pod-demo-test.yaml
kubectl get pods -o wide
创建完毕后如下:[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-85b98978db-nh2m4 1/1 Running 0 2d5h 10.244.1.2 node1 <none> <none>
ngx-health 1/1 Running 54 (5m57s ago) 3h6m 10.244.2.2 node2 <none> <none>
ngx-health-tcp 1/1 Running 28 (5m26s ago) 171m 10.244.2.3 node2 <none> <none>
ngx-health-tcpsocket 0/1 CrashLoopBackOff 25 (102s ago) 152m 10.244.1.3 node1 <none> <none>
pod-demo-test 0/1 Pending 0 2m29s <none> <none> <none> <none>
pod-demo-tests 0/1 ContainerCreating 0 13s <none> node2 <none> <none>
可以看到,我们在配置了节点选择器后,该Pod对象会运行在node2节点上,这就说明了节点选择器的选择Node节点作用。[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-85b98978db-nh2m4 1/1 Running 0 2d5h 10.244.1.2 node1 <none> <none>
ngx-health 0/1 CrashLoopBackOff 55 (72s ago) 3h9m 10.244.2.2 node2 <none> <none>
ngx-health-tcp 0/1 CrashLoopBackOff 28 (54s ago) 173m 10.244.2.3 node2 <none> <none>
ngx-health-tcpsocket 0/1 CrashLoopBackOff 25 (4m7s ago) 154m 10.244.1.3 node1 <none> <none>
pod-demo-test 0/1 Pending 0 4m54s <none> <none> <none> <none>
pod-demo-tests 1/1 Running 0 2m38s 10.244.2.6 node2 <none>
文章评论 本文章有个评论