首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Kubernetes(k8s)的调度器 - 调度亲和性实践

Kubernetes(k8s)的调度器 - 调度亲和性实践

作者头像
用户4945346
发布于 2024-02-17 15:49:41
发布于 2024-02-17 15:49:41
1K0
举报
文章被收录于专栏:pythonista的日常pythonista的日常

Kubernetes(简称K8s)是一个用于管理容器化应用程序的开源平台。在K8s中,节点亲和度设置是一种调度分配策略,用于定义 Pod(一个或者多个容器的集合) 可以调度到哪些节点上以及基于怎样的规则分配 Pod 到各个节点。

前段时间在我们的 K8s 集群运行一些计算任务,但是发现好多 Pod 都会集中分配到一个节点上,这些计算任务比较依赖网速,同一个节点上执行非常影响任务的执行效率。

集群的默认调度方式是优先分配到到空闲资源比较多的节点上,但是我希望任务尽可能分配到不同的节点上,充分发挥多个节点的优势。

通过简单搜索发现可以配置调度器的调度亲和性来实现我的需求。我在 K8s 的 Config Maps 中设置如下:

affinity:是节点亲和性的声明

podAntiAffinity:表示Pod反亲和性,反亲和性是将 Pod 运行在不同区域、不同机器上

preferredDuringSchedulingIgnoredDuringExecution:软策略,表示尽可能的满足配置的策略,当条件不满足时,它也能够接受编排于其它不符合条件的节点之上

podAffinityTerm:pod软亲和性使用它来挑选 Pod 标签

labelSelector:标签选择器 ️

topologyKey:指定要将当前创建Pod运行在具备什么样的Node标签上,通常指定 Node 标签的Key。

上面的配置描述为,标签为 “app=airflow-worker” 的每个 pod 尽可能均匀分配到不同的节点上,节点标签 key 必须是 kubernetes.io/hostname。

扩展:

软硬策略:

preferredDuringSchedulingIgnoredDuringExecution:软策略

requiredDuringSchedulingIgnoredDuringExecution:硬策略,必须按照策略调度找到合适的节点,如果找不到就会一直等待直到有合适的节点。

亲和性和反亲和性:

NodeAffinity 节点亲和性

PodAffinity Pod亲和性

PodAntAffinity Pod反亲和性

上面策略是根据 pod 的标签来设置调度规则,也可以根据节点 node 的标签,例如我认为 computer06 节点有问题,不希望 pod 调度到 06 节点hi,可以用 nodeAffinity 这样设置:

标签键值运算(operator)关系

In:label 的值在某个列表中

NotIn:label 的值不在某个列表中

Gt:label 的值大于某个值

Lt:label 的值小于某个值

Exists:某个 label 存在

DoesNotExist:某个 label 不存在

亲和性/反亲和性调度策略比较如下:

调度策略匹配标签

匹配标签

操作符

拓扑域支持

调度目标

nodeAffinity

节点node

In, NotIn, Exists, DoesNotExist, Gt, Lt

否

指向主机

podAffinity

pod

In, NotIn, Exists, DoesNotExist

是

POD 指定POD同一拓 扑域

podAnitAffinity

pod

In, NotIn, Exists, DoesNotExist

是

POD与指定POD不在同一拓扑域

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档