在kubernetes系统中,pod在大多数情况下只是容器的载体而已,通常需要通过RC、Deployment、DaemonSet、Job等对象来完成pod的调度及自动控制功能。
以下来介绍pod的几种调度方法:
1、RC、Deployment : 全自动调度
RC的主要功能之一就是自动部署一个容器应用的多个副本,以及持续监控副本的数量,在集群内始终维持用户指定的副本数量。除了使用系统内置的调度算法选择合适的node进行调度,也可以指定满足的条件来进行调度。
1)NodeSelector :定向调度
k8s默认是Master上的Schedule服务(kube-scheduler进程)根据一系列复杂的算法,最终为pod选择合适的主机,但是有时候我们希望pod创建在指定的节点上。可以通过Node的Label和Pod的nodeSelector属性匹配来达到上述目的。
(1)首先通过kubectl label来给node打上一些标签
(2)然后在pod的nodeSelector设置来匹配,如果多个node定义了相同的label,则会选一台合适的主机来创建。
注意:如果pod指定了nodeSelector,但是集群中没有包含本Label的node,即使有可使用的node,该pod也无法创建。
2)NodeAffinity :亲和性调度
由于nodeSlector通过Node的Label进行精确匹配,所以NodeAffinity增加了In、NotIn、Exists、DoseNotExists、Gt、Lt等操作符来选择Node。
2、DaemonSet :特定场景调度
用来管理在集群中每个Node上运行一份pod的副本实例
3、Job :批处理调度
如果有个批处理任务(并行或者串行启动多个计算机进程去处理一批工作项,处理完成后,整个批处理任务结束。有以下几种模式:
1)Job Template Expansion 模式
一个Job对象对应一个待处理的一批工作项(work iteam)
使用场景:批处理(work iteam)比较少,每个work iteam 的处理的数据比较大的场景
2)Queue with Pod Per Work Iteam模式:
采用一个队列存放work iteam ,一个job对象作为消费者去完成这些work iteam,在这种模式下,job会启动N个Pod,一个pod对应一个work iteam
3)Queue with Variable Pod Count模式:
与2)一样,只是启动的Pod数量是可变的