一、NodeSelector 定向调度
Kubernetes Master上的Scheduler服务(kube-scheduler进程)负责实现Pod调度,整个调度过程通过执行一系列的复杂算法,最终为每个Pod计算出最佳节点,这个过程是自动完成的,通常我们无法
知道Pod最终会被会调用到哪个节点。而在实际的情况下,可能需要将Pod调度到指定的一些Node上,可以通过Node的标签(Label)和Pod的nodeSelector属性相匹配,达到上述目的。
(1) 首先通过 kubectl label命令给目标Node打上一些标签:
kubectl label nodes <node-name> <label-key>=<label-value>为node4节点上打一个zone=north标签,表明它是"北方"的一个节点
kubectl label nodes node4 zone=north
(2) 然后,在Pod的定义中加上nodeSelector的设置,就会将Pod调度到node上拥有"zone=north"标签上:
apiVersion: v1
kind: ReplicationController
metadata:
name: redis-master
labels:
name: redis-master
spec:
replicas: 1
selector:
name: redis-master
template:
metadata:
labels:
name: redis-master
spec:
containers:
- name: master
image: kubeguide/redis-master
ports:
- containerPort: 6379
nodeSelector:
zone: north
如果多个Node都定义了相同的标签,则master节点上的scheduler会根据调度算法从这组Node上挑选一个可用的Node进行Pod调度。
通过基于Node标签的调度方式,我们可以把集群中具有不同特点的Node都贴上不同的标签,在部署应用时就可以根据应用的需求设置NodeSelector来进行指定Node范围的调度。
需要注意的是,如果指定了Pod的nodeSelector条件,且在集群中不存在包含相应标签的Node,则即使在集群中有其他可供使用的Node,这个Pod也无法被成功调用。
NodeSelector通过标签的方式,简单实现了限制Pod所在的节点的方法。
版权声明:本文为GaoChuang_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。