Kubernetes(K8s)_14_高级调度
Kubernetes(K8s)高级调度-限定Pod运行节点
高级调度
高级调度:通过污点、容忍度和亲和性影响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定义中设置;
更多推荐
所有评论(0)