c语言sscanf函数的用法是什么
257
2022-10-27
Kubernetes Scheduler浅析
概述
Kubernetes 调度器(Scheduler)是Kubernetes的核心组件;用户或者控制器创建Pod之后,调度器通过 kubernetes 的 watch 机制来发现集群中新创建且尚未被调度到 Node 上的 Pod。调度器会将发现的每一个未调度的 Pod 调度到一个合适的 Node 上来运行。调度器会依据下文的调度原则来做出调度选择。
kube-scheduler 给一个 pod 做调度选择包含两个步骤:过滤、打分过滤阶段会将所有满足 Pod 调度需求的 Node 选出来。例如,PodFitsResources 过滤函数会检查候选 Node 的可用资源能否满足 Pod 的资源请求。在过滤之后,得出一个 Node 列表,里面包含了所有可调度节点;通常情况下,这个 Node 列表包含不止一个 Node。如果这个列表是空的,代表这个 Pod 不可调度。打分阶段,调度器会为 Pod 从所有可调度节点中选取一个最合适的 Node。根据当前启用的打分规则,调度器会给每一个可调度节点进行打分。最后,kube-scheduler 会将 Pod 调度到得分最高的 Node 上。如果存在多个得分最高的 Node,kube-scheduler 会从中随机选取一个。
本文主要对Kubernetes Scheduler做一个简单介绍,让大家理解 Pod 为什么会被调度到特定的 Node 上。
首先来看下Pod生命周期
调度示意图
Kubernetes Scheduler监视Kubernetes对象存储并选择具有最高优先级的未绑定Pod来执行调度步骤或抢占步骤。
调度步骤
对于给定的Pod,如果存在至少一个节点,则启用调度步骤,以使该节点可用于托管Pod。如果启用了“调度步骤”,则调度程序会将Pod绑定到可行的节点,这样绑定将实现最高的生存能力。如果未启用“调度步骤”,则调度程序将尝试执行抢占步骤。
抢占步骤
对于给定的Pod,如果存在至少一个节点,则启用抢占步骤,以便如果要删除绑定到该节点的优先级较低的Pod子集,则该节点可用于托管Pod。如果启用了抢占步骤,则调度程序将触发删除绑定到一个节点的具有较低优先级的Pod子集,抢占步骤将造成最低的人员伤亡。(造成的人员伤亡是根据Pod中断预算(PDB)违规情况进行评估的)注意,调度程序不保证触发抢占步骤的Pod将在后续的调度步骤中绑定到该节点。
###1、过滤器对于每个Pod,Kubernetes Scheduler都会确定可行节点的集合,这是满足Pod约束的节点的集合。从概念上讲,Kubernetes Scheduler定义了一组过滤器函数,这些过滤器函数在给定Pod和Node的情况下,确定Node是否满足Pod的约束。 所有过滤器函数都必须对节点托管Pod产生true。
1.2 资源需求和资源可用性(Resource)
1.3 节点选择器(Node Selector)
1.4 Node Taints and Pod Tolerations
1.5 亲和力(Required Affinity)
Node Affinity必须将Pod分配给Node,以使Node的标签与Pod的Node Affinity Requirements匹配。 此外,不得将Pod分配给节点,以使节点的标签不符合Pod节点亲和性要求。 Pod Affinity必须将Pod分配给一个节点,以使节点上至少有一个与TopologyKey匹配的Pod符合Pod的Pod相似性要求。 Pod Anti-Affinity必须将Pod分配给节点,以使与TopologyKey匹配的节点上没有Pod符合Pod的Pod反亲和性要求。
###2、可行性对于每个Pod,Kubernetes Scheduler都会确定可行节点的集合,这是满足Pod约束的节点的集合。 然后,Kubernetes Scheduler确定具有最高生存能力的可行节点集。从概念上讲,Kubernetes Scheduler定义了一组评估函数,给定Pod和Node,它们确定Pod和Node对的生存能力。 评分相加。
2.1 首选亲和力
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~