当前位置:网站首页>Pod调度策略:亲和性、污点与污点容忍
Pod调度策略:亲和性、污点与污点容忍
2022-08-02 12:01:00 【GottdesKrieges】
Pod调度策略:亲和性、污点与污点容忍
节点亲和性
nodeSelector
nodeSelector用于将Pod调度到匹配Label的节点上,如果没有匹配的标签会调度失败。
作用:
- 约束Pod到特定节点运行;
- 完全匹配节点标签。
应用场景:
- 专用节点:根据业务线将节点分组管理;
- 匹配特殊硬件:部分节点配置有SSD硬盘、GPU。
示例:确保Pod分配到具有SSD硬盘的节点上
- 给节点打标签
#kubectl label nodes <node名称> <label-key>=<label-value>
kubectl label nodes k8s-node1 disktype=ssd
#验证
kubectl get nodes --show-labels
- 添加nodeSelector字段到Pod配置中
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd
- 验证
kubectl get pods -o wide
删除节点标签:
kubectl label node k8s-node1 <label-key>-
#验证
kubectl get pods -o wide
nodeAffinity
节点亲和性,类似于nodeSelector,可以根据节点上的标签来约束Pod可以调度到哪些节点。
相比nodeSelector:
- 匹配有更多的逻辑组合,不只是字符串的完全相等,支持
in
、notin
、exists
、doesnotexist
、gt
、lt
操作符。 - 调度分为软策略和硬策略,而不是硬性要求:
requiredDuringSchedulingIgnoredDuringExecution
:硬策略,必须满足;preferredDuringSchedulingIgnoredDuringExecution
:软策略,尝试满足,但是不保证。
举例:
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- antarctica-east1
- antarctica-west1
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
containers:
- name: with-node-affinity
image: k8s.gcr.io/pause:2.0
注意:
- 如果同时使用了
nodeSelector
和nodeAffinity
,那么k8s在调度Pod时必须同时满足两者的条件。 - 如果在使用
nodeAffinity
时指定了多个nodeSelectorTerms
,那么节点只要满足其中一个nodeSelectorTerms
,就可以被调度分配Pod。 - 如果在一个
nodeSelectorTerms
下指定了多个matchExpressions
,那么节点必须满足所有matchExpressions
,才能被调度分配Pod。
污点与污点容忍
基于节点标签分配是站在Pod的角度上,通过在Pod上添加属性,来确定Pod是否要调度到指定的节点上。相反地,我们也可以在Node节点上添加污点属性(Taints),来避免Pod被分配到不合适的节点上。
taints
:避免Pod调度到特定节点上;tolerations
:允许Pod调度到有Taints的节点上。
举例:
- 给节点添加污点
#kubectl taint node <node名称> key=value:[effect]
kubectl taint node k8s-node2 gpu=yes:NoSchedule
其中,effect可以取值为:
NoSchedule
:一定不能被调度;PreferNoSchedule
:尽量不要被调度,非必须;NoExecute
:不仅不会调度,还会驱逐节点上已有的Pod。
- 验证
kubectl describe node k8s-node2 | grep Taint
- 如果希望Pod可以被分配到有污点的节点上,要在Pod配置中添加污点容忍。
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
tolerations:
- key: "gpu"
operator: "Equal"
value: "yes"
effect: "NoSchedule"
删除污点:
#kubectl taint node <node名称> key:[effect]-
kubectl taint node k8s-node2 gpu:NoSchedule-
注意:
Taints和Tolerations匹配的原则是key
相同、effect
相同,并且满足:
- 运算符是
Exists
(即没有value
); - 运算符是
Equal
,且value
相等。
两个特例:
- 一个空的
key
和运算符Exists
,会匹配所有的key
、value
和effect
,意味著容忍所有污点; - 一个
key
和一个空的effect
匹配此key
的所有effect
。
References
【1】https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
【2】https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
边栏推荐
猜你喜欢
力扣35-搜索插入位置——二分查找
基于threejs的商品VR展示平台的设计与实现思路
MD5详解(校验文件完整性)
使用mosquitto过程中的问题解决
DTG-SSOD:最新半监督检测框架,Dense Teacher(附论文下载)
力扣58-左旋转字符串
【Acunetix-Forgot your password】
自己如何做小程序呢?
excel 批量翻译-excel 批量函数公司翻译大全免费
- [email protected] This version of tar is no longer supported, and will not receive"/>
npm WARN deprecated [email protected] This version of tar is no longer supported, and will not receive
随机推荐
Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。
The ex-boyfriend bought chili water and threatened to rob his daughter. Can the woman apply for a personal safety protection order?
使用mosquitto过程中的问题解决
QListView的使用
云原生(三十) | Kubernetes篇之应用商店-Helm介绍
前男友买辣椒水威胁要抢女儿,女方能否申请人身安全保护令?
Transfer files between servers
#夏日挑战赛#【FFH】OpenHarmony设备开发基础(三)编译依赖
Jest 测试框架 beforeEach 的设计原理解析
【2022 小目标检测综述】Towards Large-Scale Small Object Detection: Survey and Benchmarks
借小程序容器打造自有App小程序生态
手撸架构,网络 面试36问
npm WARN config global `--global`, `--local` are deprecated. Use `--location解决方案
go源码之sync.Waitgroup
主流跨端技术一览
Axure谷歌浏览器扩展程序下载及安装方法(免翻墙)
DTG-SSOD:最新半监督检测框架,Dense Teacher(附论文下载)
【MySQL系列】- LIKE查询 以%开头一定会让索引失效吗
记录代码
元宇宙“吹鼓手”Unity:疯狂扩局,悬念犹存