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定义中设置;
                    
                
                
            
        
浙公网安备 33010602011771号