当前位置:网站首页>Pod Scheduling Strategy: Affinity, Stain and Stain Tolerance
Pod Scheduling Strategy: Affinity, Stain and Stain Tolerance
2022-08-02 12:08:00 【GottdesKrieges】
Pod调度策略:亲和性、污点与污点容忍
节点亲和性
nodeSelector
nodeSelector用于将Pod调度到匹配Label的节点上,如果没有匹配的标签会调度失败.
作用:
- 约束Pod到特定节点运行;
- 完全匹配节点标签.
应用场景:
- 专用节点:Nodes are grouped and managed according to business lines;
- Match special hardware:Some nodes are configured with 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在调度PodBoth conditions must be met at the same time. - 如果在使用
nodeAffinity
when specifying multiplenodeSelectorTerms
,Then the node only needs to satisfy one of themnodeSelectorTerms
,can be dispatchedPod. - 如果在一个
nodeSelectorTerms
More than one is specified belowmatchExpressions
,Then the node must satisfy allmatchExpressions
,to be dispatchedPod.
污点与污点容忍
基于节点标签分配是站在Pod的角度上,通过在Pod上添加属性,来确定PodWhether to schedule to the specified node.相反地,我们也可以在NodeAdd a taint attribute to the 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
:不仅不会调度,It will also evict existing ones on the nodePod.
- 验证
kubectl describe node k8s-node2 | grep Taint
- 如果希望PodCan be assigned to tainted nodes,要在PodAdd taint tolerance to configuration.
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
,Means tolerating all blemishes; - 一个
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/
边栏推荐
猜你喜欢
DTG-SSOD:最新半监督检测框架,Dense Teacher(附论文下载)
simulink PID自动整定
【The 6th Strong Net Cup CTF-Wp】
CCF论文会议 IEEE 如何查询某个会议期刊的所有文章
力扣35-搜索插入位置——二分查找
以Boost为例的type3电压环补偿器实例
np.nan, np.isnan, None, pd.isnull, pd.isna 整理与小结
Leek 151 - Reverse words in a string
Lexicon 27 - Remove Elements - Simple Questions
使用mosquitto过程中的问题解决
随机推荐
1.3快速生成树协议RSTP
SQL function $TRANSLATE
Chapter 11 Documents
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之一
手撸架构,Mysql 面试126问
【项目管理技术的优势】
npm WARN deprecated [email protected] This version of tar is no longer supported, and will not receive
翻译英语的软件-免费翻译软件-各种语言互相翻译
力扣209-长度最小的字符串——滑动窗口法
ASP.NET Core 6框架揭秘实例演示[31]:路由&ldquo;高阶&rdquo;用法
Failure Analysis | A SELECT statement crashes MySQL, what happened?
以Boost为例的type3电压环补偿器实例
运行yum报错Error: Cannot retrieve metalink for reposit
#夏日挑战赛#【FFH】OpenHarmony设备开发基础(三)编译依赖
DTG-SSOD: The latest semi-supervised detection framework, Dense Teacher (with paper download)
Likou 977-Squaring of ordered arrays - brute force method & double pointer method
学习经验分享之七:YOLOv5代码中文注释
雷克萨斯,锁死的安全,挡不住的心寒
力扣35-搜索插入位置——二分查找
测试开发之路,我在大厂做测试这四年的感悟