今天小编给大家分享的是kubernete集群中pod的调度机制,相信大部分人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,话不多说,一起往下看吧。
1。豆荚调度
1.1 Pod调度概述
kubernets是容器编排引擎,其中最主要的一个功能是容器的调度,通过kube-scheduler实现容器的完全自动化调度,调度周期分为:调度周期调度周期和绑定周期绑定周期,其中调度周期细分为过滤过滤器和称重量重,按照指定的调度策略将满足运行Pod节点的节点赛选出来,然后进行排序;绑定周期是经过kube-scheduler调度优选的圆荚体后,由特定的节点节点看然后通过kubelet运行。
过滤阶段包含预选谓词和得分排序,预选是筛选满足条件的节点,排序是最满足条件的节点打分并排序,预选的算法包含有:
- <李> CheckNodeConditionPred,节点是否准备李> <李> MemoryPressure,,,,,,节点内存是否压力大(内存是否足够)李> <李> DiskPressure,,,,,,,,,节点磁盘压力是否大(空间是否足够)李> <李> PIDPressure,,,,,,,,,节点Pid是否有压力(Pid进程是否足够)李> <李> GeneralPred,,,,,,,,,匹配pod.spec。李李主机名字段> <> MatchNodeSelector,,,,匹配pod.spec。李李nodeSelector标签> <> PodFitsResources,,,,,判断资源定义的资源是否满足李> <>李PodToleratesNodeTaints,能容忍的污点pod.spec。李的纵容李> <> CheckNodeLabelPresence李> <李> CheckServiceAffinity李> <李> CheckVolumeBinding李> <李> NoVolumeZoneConflict李>
过滤条件需要检查节点上满足的条件,可以通过kubectl描述节点的节点编号方式查看,如下图:
优选调度算法有:
- <李> least_requested,资源消耗最小的节点李> <李> balanced_resource_allocation各项资源消耗最均匀的节点李> <李> node_prefer_avoid_pods,节点倾向李> <李> taint_toleration,污点检测,检测有污点条件的节点,得分越低李> <李> selector_spreading,节点选择李> <李> interpod_affinity,,,pod亲和力遍历李> <李> most_requested,,,资源消耗最大的节点李> <李> node_label,,,,,,李节点标签>
1。2指定nodeName调度
节点名是PodSpec中的一个字段,可以通过pod.spec。节点名指定将pod调度到某个具体的节点节点上,该字段比较特殊一般都为空,如果有设置nodeName字段,kube-scheduler会直接跳过调度,在特定节点上通过kubelet启动豆荚。通过nodeName调度并非是集群的智能调度,通过指定调度的方式可能会存在资源不均匀的情况,建议设置的Qos保证,防止资源不均时候豆荚被驱逐表明。如下以创建一个豆荚运行在节点3上为例:
- <李>编写yaml将pod指定在节点3节点上运行李>
<代码类=" language-js "> #猫nginx-nodeName.yaml root@node-1演示 apiVersion: v1 :豆荚 元数据: 名称:nginx-run-on-nodename ,注释: ,kubernetes。io/描述:“运行荚> [root@node-1演示]# - f nginx-nodeName.yaml kubectl适用 豆荚/nginx-run-on-nodename创建代码>
- <李>查看确认pod的运行情况,已运行在节点3节点李>
<代码类=" language-js "> [root@node-1演示]# kubectl得到豆荚nginx-run-on-nodename - o宽 的名字,,,,,,,,,,准备好了状态,,重新启动年龄,,知识产权,,,,,节点的大敌;,指定节点,盖茨准备 nginx-run-on-nodename,1/1,,运行,0,,,,6 m52大敌;10.244.2.15,节点3,& lt; none>,,,,,& lt; none> 代码>
1.2。通过nodeSelector调度
<代码> nodeSelector是PodSpec中的一个字段,nodeSelector是最简单实现将pod运行在特定节点节点的实现方式,其通过指定键和值键值对的方式实现,需要节点设置上匹配的标签,节点调度的时候指定上特定的标签即可。如下以节点2添加一个应用:网页的标签,调度pod的时候通过nodeSelector选择该标签:代码>
- <李>给节点2添加标签李>
<代码类=" language-js "> [root@node-1演示]# kubectl标签节点节点2应用程序web=节点/节点2标记代码>
- <李>查看校验标签设置情况,节点2增加多了一个应用程序web的标签李>=
<代码类=" language-js "> [root@node-1演示]#——show-labels kubectl得到节点 的名字,,状态,的角色,,年龄版本,标签 节点1,准备好了,,主15 d,v1.15.3,beta.kubernetes.io/拱=amd64, beta.kubernetes.io/os=linux, kubernetes.io/拱=amd64, kubernetes.io/主机名=节点1,kubernetes.io/os=linux, node-role.kubernetes.io/主=节点2,准备好了,,& lt; none>,15 d,v1.15.3,应用=网络,beta.kubernetes.io/拱=amd64, beta.kubernetes.io/os=linux, kubernetes.io/拱=amd64, kubernetes.io/主机名=节点2,kubernetes.io/os linux=节点3,准备好了,,& lt; none>,15 d,v1.15.3,beta.kubernetes.io/拱=amd64, beta.kubernetes.io/os=linux, kubernetes.io/拱=amd64, kubernetes.io/主机名=节点3,kubernetes。io/os linuxkubernete集群中pod的调度机制