Kubernetes(K8s)_14_高级调度

高级调度

高级调度:通过污点、容忍度和亲和性影响Pod的调度

节点污点

污点(Taint):用于确保Pod不会分配到特定节点

1)Master节点用污点确保只有控制平面组件可部署在该节点;

2)一个节点可拥有多个污点;


taint命令:指定节点添加污点

指令格式:kubectl taint nodes 节点名 键=值:排斥等级

1)值可省略(连同“=”省略);

2)排斥等级(effect)分为以下3种:

排斥等级说明
NoSchedule (调度时作用)Pod不能容忍该污点 (不能容忍的Pod不可调度到该节点)
PreferNoSchedule (调度时作用)尽量阻止Pod调度到该节点 (若没其他节点可以调度,则也可调度至该节点)
NoExecute (持续作用)确保节点中无不可容忍该污点的Pod (若已存在不容忍的,则驱逐该Pod)

3)若去除一个节点的污点,只需在以上的指令格式末尾处添加“-”;


Kubernetes中内置键,如下:

说明
node.kubernetes.io/not-ready节点未准备好
node.kubernetes.io/unreachable节点不可达
node.kubernetes.io/memory-pressure节点存在内存压力
node.kubernetes.io/disk-pressure节点存在磁盘压力
node.kubernetes.io/network-unavaliable节点网络不可用
node.kubernetes.io/unschedulable节点不可调度

Pod容忍度

容忍度(Toleration):Pod是否容忍节点的污点(可调度到该节点)

1)Pod可拥有多个容忍度(在验证时可同时作用);

2)只有Pod接收节点上所有的污点时,Pod才可调度至该节点;


Pod定义添加容忍度的格式(其他省略):

spec:
  tolerations:
  - key: “键1”
   operator: “Equal”
   value: “值1”
   effect: “排斥等级”
   tolerationSeconds: 数值(单位:s)
  - key: 键
   operator: “Exists”
   effect: “排斥等级”
   tolerationSeconds: 数值(单位:s)

1)operator有两种形式可指定,如下:

operator说明
Equal污点和容忍度的值需相等 (默认operator)
Exists忽略值的影响 (不能指定值(value))

2)tolerationSeconds选项指定该Pod不容忍节点,分配到其他节点的等待时间;

2)污点和容忍度中键、值和排斥等级都相等,才可认为Pod容忍该污点;

3)若key为空且operator为Exists,则该容忍度可容忍任意污点;

4)若排斥等级为空,则所有键都可与该key相等;

节点亲和性

亲和性(Affinity):使Pod尽量分配到特定节点

1)通过在Pod的YAML文件中添加指定字段实现亲和性;

2)亲和性定义分为:基于标签、基于权重

3)节点中除亲和性影响,还有其他优先级函数决定Pod的调度;

//不完全等同于Pod中用节点的标签选择器的调度方式;



非亲和性(AntiAffinity):使Pod尽量分散到各个节点

1)定义格式完全相同于亲和性,只需将podAffinity改为podAntiaffinity


Pod定义中添加基于标签亲和性的格式(其他省略):

spec:
  affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
       - matchExpressions:
         - key: 值1
           operator: 运算符
           values:
            - “值1”
              “值N”

1)亲和性中调度Pod的执行力度分为两种:

执行力度说明
requiredDuringSchedulingIgnoredDuringExecution强制性
preferredDuringSchedulingIgnoredDuringExecution偏好性

//偏好性不强制要求Pod调度到特定节点(也可调度到其他非特定节点);



Pod定义中添加基于权重亲和性的格式(其他省略):

spec:
  affinity:
  nodeAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
     - weight: 权重值
       preference:
         matchExpressinos:
          - key: 值1
            operator: 运算符
            values:
             - “值1”
               “值N”
     - weight: 权重值
      同上,省略

1)Pod定义中的权重值总和要为100;

2)基于标签和基于权重可同时在同一个Pod定义中设置;

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐