污点 节点亲和性 容忍度
污点是K8s高级调度的特性,用于限制哪些Pod可以被调度到某一个节点。在普通节点横向时我们可以使用污点容忍度创建恶意pod来对主节点进行横向控制。
1、kube-scheduler调度
kube-scheduler
是Kubernetes
集群的默认调度器,并且是集群控制面(master)的一部分。对每一个新创建的Pod或者是未被调度的Pod,kube-scheduler
会选择一个最优的Node去运行这个Pod。
然而,Pod
内的每一个容器对资源都有不同的需求,而且Pod本身也有不同的资源需求。因此,Pod在被调度到Node上之前,根据这些特定的资源调度需求,需要对集群中的Node进行一次过滤。
如下为在创建pod的流程中,调度器的作用:
当创建pod时候,会首先把创建的命令请求提交给apiserver,通过一系列认证授权,apiserver把pod数据存储到etcd,创建deployment资源并初始化。然后再是scheduler通过进行list-watch机制进行监测,经过调度算法
把pod调度到某个node节点上,最后信息更新到etcd,再后面就是kubelet接受信息到创建容器。
2、哪些因素影响调度
1.pod资源限制
当前调度器选择适当的节点时,调度程序会检查每个节点是否有足够的资源满足 Pod 调度,比如查看CPU和内存限制是否满足:
通过资源限制调度程序可确保由于过多 Pod 竞争消耗节点所有可用资源,从而导致节点资源耗尽引起其他系统异常。
2.节点选择器nodeSelector
在创建pod的时候,节点选择器可以约束pod在特定节点上运行。
nodeSelector
也是节点选择约束的最简单推荐形式,nodeSelector
字段添加到 Pod 的规约中设置希望目标节点所具有的节点标签。 K8s 只会将 Pod 调度到拥有你所指定的每个标签的节点上。
例子, 比如多个节点需要调度时候