写点什么

影响 K8S Pod 分配和调度策略的两大关键特性

  • 2020-05-25
  • 本文字数:2193 字

    阅读完需:约 7 分钟

影响K8S Pod分配和调度策略的两大关键特性

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

在 Kubernetes 中有一个最复杂的调度器可以处理 pod 的分配策略。基于在 pod 规范中所提及的资源需求,Kubernetes 调度器会自动选择最合适的节点来运行 pod。


但在许多实际场景下,我们必须干预调度过程才能在 pod 和一个节点或两个特定 pod 之间进行匹配。因此,Kubernetes 中有一种十分强大的机制来管理及控制 pod 的分配逻辑。


那么,本文将探索影响 Kubernetes 中默认调度决定的关键特性。

节点亲和性/反亲和性

Kubernetes 一向以来都是依赖 label 和 selector 来对资源进行分组。例如,某服务使用 selector 来过滤具有特定 label 的 pod,这些 label 可以选择性地接收流量。Label 和 selector 可以使用简单的基于等式的条件(=and!=)来评估规则。通过 nodeSelector 的特性(即强制将 pod 调度到特定节点上),可以将这一技术扩展到节点中。


此外,label 和 selector 开始支持基于集合的 query,它带来了基于 in、notin 和 exist 运算符的高级过滤技术。与基于等式的需求相结合,基于集合的需求提供了复杂的技术来过滤 Kubernetes 中的资源。


节点亲和性/反亲和性使用 label 和 annotation 的基于表达集的过滤技术来定义特定节点上的 pod 的分配逻辑。Annotation 可以提供不会暴露到 selector 的其他元数据,这意味着用于 annotation 的键不会包含在 query 和过滤资源中。但是节点亲和性可以在表达式中使用 annotation。反亲和性可以确保 pod 不会被强制调度到与规则匹配的节点上。


除了能够在 query 中使用复杂的逻辑之外,节点亲和性/反亲和性能够为分配逻辑强制施加硬性和软性规则。硬性规则将会执行严格的策略,可能会阻止将 pod 分配到不符合条件的节点上。而软性规则则会首先确认节点是否与特定的条件相匹配,如果它们不匹配,它将使用默认的调度模式来分配 Pod。表达式 requiredDuringSchedulingIgnoredDuringExecutionpreferredDuringSchedulingIgnoredDuringExecution 将会分别执行硬性规则和软性规则。


以下是在硬性和软性规则下使用节点亲和性/反亲和性的示例:


affinity:  nodeAffinity:    preferredDuringSchedulingIgnoredDuringExecution:      nodeSelectorTerms:        - matchExpressions:          - key: "failure-domain.beta.kubernetes.io/zone"            operator: In            values: ["asia-south1-a"]
复制代码


以上规则将指示 Kubernetes 调度器尝试将 Pod 分配到在 GKE 集群的 asia-south1-a 区域中运行的节点上。如果没有可用的节点,则调度器将会直接应用标准的分配逻辑。


affinity:  nodeAffinity:    requiredDuringSchedulingIgnoredDuringExecution:      nodeSelectorTerms:        - matchExpressions:          - key: "failure-domain.beta.kubernetes.io/zone"            operator: NotIn            values: ["asia-south1-a"]
复制代码


以上规则通过使用 NotIn 运算符来强制执行反亲和性。这是一个硬性规则,它能够确保没有 pod 被分配到运行在 asia-south1-a 空间中的 GKE 节点。

Pod 亲和性/反亲和性

尽管节点亲和性/反亲和性能够处理 pod 和节点之间的匹配,但是有些场景下我们需要确保 pod 在一起运行或在相同的节点上不运行 2 个 pod。Pod 亲和性/反亲和性将帮助我们应用强制实施粒度分配逻辑。


与节点亲和性/反亲和性中的表达式类似,pod 亲和性/反亲和性也能够通过 requiredDuringSchedulingIgnoredDuringExecutionpreferredDuringSchedulingIgnoredDuringExecution 强制实施硬性以及软性规则。还可以将节点亲和性与 pod 亲和性进行混合和匹配,以定义复杂的分配逻辑。


为了能够更好地理解概念,想象一下我们有一个 web 和缓存 deployment,其中三个副本在一个 3 节点的集群中运行。为了确保在 web 和缓存 pod 之间低延迟,我们想要在用一个节点上运行它们。与此同时,我们不想在相同的节点上运行超过 1 个缓存 pod。基于此情况,我们需要实施以下策略:每个节点仅运行 1 个且只有 1 个缓存 Pod 的 web pod。


首先,我们将使用反亲和性规则来部署缓存,它将阻止超过 1 个 pod 运行在 1 个节点上:


      affinity:        podAntiAffinity:          requiredDuringSchedulingIgnoredDuringExecution:          - labelSelector:              matchExpressions:              - key: app                operator: In                values:                - redis            topologyKey: "kubernetes.io/hostname"
复制代码


topoloyKey 使用附加到节点的默认 label 动态过滤节点的名称。请注意,我们使用 podAntiAffinity 表达式和 in 运算符来应用规则的方式。


假设在集群的某个节点上安排了 3 个 pod 缓存,那么现在我们想要在与缓存 Pod 相同的节点上部署 web pod。我们将使用 podAffinity 来实施这一逻辑:


        podAffinity:          requiredDuringSchedulingIgnoredDuringExecution:          - labelSelector:              matchExpressions:              - key: app                operator: In                values:                - redis            topologyKey: "kubernetes.io/hostname"
复制代码


以上代码表明 Kubernetes 调度器要寻找有缓存 Pod 的节点并部署 web pod。


除了节点和 pod 的亲和性/反亲和性之外,我们还能使用 taints 和 tolerations 来定义自定义分配逻辑。此外,我们还能写自定义调度程序,它可以从默认的调度程序中接管调度逻辑。


2020-05-25 16:40678

评论

发布
暂无评论
发现更多内容

轻松比较文件和文件夹:Beyond Compare 4 Mac中文

真大的脸盆

Mac Mac 软件 对比工具 比较文件 对比软件

PaddleSeg 2.8版本正式发布啦!

飞桨PaddlePaddle

飞桨

全国计算机等级二级考试新科目—openGauss数据库程序设计

openGauss

Fabarta 图增强数据血缘治理解决方案

Fabarta

数据治理 图数据库 图智能 血缘治理

三分钟完成静态网站托管

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜 静态网站托管

亚信科技AntDB数据库荣膺第十二届数据技术嘉年华(DTC 2023)“最具潜力数据库”大奖

亚信AntDB数据库

AntDB AntDB数据库 企业号 4 月 PK 榜

AI+算力,赋予天翼云数字人“最强大脑”!

天翼云开发者社区

天翼云赋能芦山县医共体建设,为群众铺就便捷顺畅就医路

天翼云开发者社区

高性能网络SIG月度动态:virtio-net 支持动态中断调节,SMC v2 协议增加新扩展

OpenAnolis小助手

ebpf 高性能网络 龙蜥社区 sig 月度动态

前端开发会被AI替代吗? | 社区征文

--linshuai

三周年征文

MobTech MobPush|不同手机厂商推送问题

MobTech袤博科技

手把手教你集成ChatGPT到公众号

派大星

ChatGPT

详解GaussDB(DWS)的query_band负载识别与应用

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

LED显示屏室内改为户外为何不可取?

Dylan

LED显示屏 户外LED显示屏 户内led显示屏

北京 Meetup 邀你来|云上 StarRocks 极速湖仓

阿里云大数据AI技术

大数据

成功实践丨基于昇腾,安擎助力深圳某法院司法提效

科技热闻

海量数据×桂林银行 | 满足金融用户稳健周密需求,做好国内数据库演进的实践担当

openGauss

如何在 Postman 中进行 HTTPS 请求

Liam

Java 程序员 后端 Postman API 调试

惠普聚焦资源再利用、森林保护和碳排放,理念贯穿电脑全生命周期

叶落便知秋

为什么众多大型国企都在升级企业数智化底座?

用友BIP

技术大会 用友iuap 用友技术大会 升级企业数智化底座 央国企数智化转型

MegEngine 使用小技巧:使用 Optimizer 优化参数

MegEngineBot

神经网络 深度学习 开源框架 MegEngine 参数优化

“天翼云出海友好客户启航会”圆满收官!

天翼云开发者社区

全栈混合云综合架构方案研究和落地

天翼云开发者社区

数字先锋| “智慧旅游”新模式,天翼云助力张家界旅游产业创新发展!

天翼云开发者社区

【致地图开发者】地图开放平台假期服务公告

百度开发者中心

百度地图

服务器通用背板管理(UBM)实现

天翼云开发者社区

宇信科技加入正式openGauss社区

openGauss

golang-GMP模型

字节跳动的开源历程与价值思考

字节跳动开源

开源 云原生 演讲 字节

【转载】“一中心四辅助” | 亚信安慧产品与解决方案全栈图谱发布

亚信AntDB数据库

AntDB AntDB数据库 企业号 4 月 PK 榜

[ChatGPT 勘误] 关于 CL_WB_PGEDITOR 的用途

汪子熙

编程 abap Netweaver 思爱普 三周年连更

影响K8S Pod分配和调度策略的两大关键特性_文化 & 方法_Rancher_InfoQ精选文章