一、Node标签概念¶
每个node节点默认会有很多标签,标签在日常工作中就类似我们的一个标识;看到标签 就能晓得这台node节点的主要用处;
1.1 为节点添加标签¶
查看节点
[root@master01 ~]# kg node
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane 4d15h v1.26.9
master02 Ready control-plane 4d15h v1.26.9
master03 Ready control-plane 4d15h v1.26.9
node01 Ready <none> 4d15h v1.26.9
node02 Ready <none> 4d15h v1.26.9
为node节点加上核心应用的标签
[root@master ~]# kubectl label nodes node01 apptype=core
验证节点标签
[root@master01 ~]# kubectl get nodes --show-labels | grep apptype=core
node01 Ready <none> 4d15h v1.26.9 apptype=core,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node01,kubernetes.io/os=linux
去除节点标签
[root@master01 ~]# kubectl label nodes node01 apptype-
二、调度策略¶
2.1 nodeSelector¶
nodeSelector 是节点选择约束的最简单推荐形式。你可以将 nodeSelector 字段设置你希望 目标节点所具有的节点标签 。 Kubernetes只会将 Pod 调度到拥有你所指定的每个标签的节点上。
[root@master01 ~]# vim busybox.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox
spec:
replicas: 3
selector:
matchLabels:
app: busybox
template:
metadata:
labels:
app: busybox
spec:
nodeSelector:
apptype: core
containers:
- image: registry.cn-hangzhou.aliyuncs.com/abroad_images/busybox
name: busybox
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- sleep 3000
演示说明:
1、将下面两行进行注释
nodeSelector:
apptype=core
2、根据下面文件进行创建deployment
[root@master01 ~]# vim busybox.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox
spec:
replicas: 3
selector:
matchLabels:
app: busybox
template:
metadata:
labels:
app: busybox
spec:
#nodeSelector:
# apptype: core
containers:
- image: registry.cn-hangzhou.aliyuncs.com/abroad_images/busybox
name: busybox
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- sleep 3000
[root@master01 ~]# k apply -f busybox.yaml
3、验证,观察到默认是分配到不同node节点
[root@master01 ~]# kg po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox-5f47ccc474-nkdcp 1/1 Running 0 20s 172.21.231.135 node02 <none> <none>
busybox-5f47ccc474-tkrp8 1/1 Running 0 20s 172.18.71.2 master03 <none> <none>
busybox-5f47ccc474-twnhc 1/1 Running 0 20s 172.29.55.7 node01 <none> <none>
4、将上面两行取消注释
删除前面操作
[root@master01 ~]# k delete -f busybox.yaml
重新定义yaml文件,将下面两行内容取消注释
nodeSelector:
apptype: core
完整配置文件如下:
[root@master01 ~]# vim busybox.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox
spec:
replicas: 3
selector:
matchLabels:
app: busybox
template:
metadata:
labels:
app: busybox
spec:
nodeSelector:
apptype: core
containers:
- image: registry.cn-hangzhou.aliyuncs.com/abroad_images/busybox
name: busybox
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- sleep 3000
[root@master01 ~]# k apply -f busybox.yaml
5、再次验证,观察到因为节点没有打指定标签apptype=core无法调度
[root@master01 ~]# kg po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox-74b8bf9d79-dhcjq 0/1 Pending 0 2m36s <none> <none> <none> <none>
busybox-74b8bf9d79-kp8s7 0/1 Pending 0 2m36s <none> <none> <none> <none>
busybox-74b8bf9d79-tl7tt 0/1 Pending 0 2m36s <none> <none> <none> <none>
6、给node01节点打上指定标签后,再次查看,观察到三个Pod全部调度到指定的node01节点上
[root@master01 ~]# kubectl label nodes node01 apptype=core
[root@master01 ~]# kg po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox-74b8bf9d79-dhcjq 1/1 Running 0 5m49s 172.29.55.8 node01 <none> <none>
busybox-74b8bf9d79-kp8s7 1/1 Running 0 5m49s 172.29.55.9 node01 <none> <none>
busybox-74b8bf9d79-tl7tt 1/1 Running 0 5m49s 172.29.55.10 node01 <none> <none>
7、环境复原
# 删除资源
[root@master01 ~]# k delete -f busybox.yaml
# 删除标签
[root@master01 ~]# kubectl label nodes node01 apptype-