kubernete集群中pod的调度机制

  

今天小编给大家分享的是kubernete集群中pod的调度机制,相信大部分人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,话不多说,一起往下看吧。

1。豆荚调度

1.1 Pod调度概述

kubernets是容器编排引擎,其中最主要的一个功能是容器的调度,通过kube-scheduler实现容器的完全自动化调度,调度周期分为:调度周期调度周期和绑定周期绑定周期,其中调度周期细分为过滤过滤器和称重量重,按照指定的调度策略将满足运行Pod节点的节点赛选出来,然后进行排序;绑定周期是经过kube-scheduler调度优选的圆荚体后,由特定的节点节点看然后通过kubelet运行。

 kubernete集群中Pod的调度机制

过滤阶段包含预选谓词和得分排序,预选是筛选满足条件的节点,排序是最满足条件的节点打分并排序,预选的算法包含有:

    <李> CheckNodeConditionPred,节点是否准备 <李> MemoryPressure,,,,,,节点内存是否压力大(内存是否足够) <李> DiskPressure,,,,,,,,,节点磁盘压力是否大(空间是否足够) <李> PIDPressure,,,,,,,,,节点Pid是否有压力(Pid进程是否足够) <李> GeneralPred,,,,,,,,,匹配pod.spec。李李主机名字段 <> MatchNodeSelector,,,,匹配pod.spec。李李nodeSelector标签 <> PodFitsResources,,,,,判断资源定义的资源是否满足李 <>李PodToleratesNodeTaints,能容忍的污点pod.spec。李的纵容李 <> CheckNodeLabelPresence李 <李> CheckServiceAffinity李 <李> CheckVolumeBinding李 <李> NoVolumeZoneConflict李

过滤条件需要检查节点上满足的条件,可以通过kubectl描述节点的节点编号方式查看,如下图:

 kubernete集群中pod的调度机制

优选调度算法有:

    <李> 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 linux 

kubernete集群中pod的调度机制