【Kubernets】K8S亲和性配置相关说明

devtools/2025/3/4 17:50:05/

K8S亲和性配置相关说明

    • 配置说明
    • **一、亲和性类型**
    • **二、节点亲和性(Node Affinity)**
      • **1. 硬策略:requiredDuringSchedulingIgnoredDuringExecution**
      • **2. 软策略:preferredDuringSchedulingIgnoredDuringExecution**
    • **三、Pod 亲和性(Pod Affinity)**
      • **1. 硬策略:requiredDuringSchedulingIgnoredDuringExecution**
      • **2. 软策略:preferredDuringSchedulingIgnoredDuringExecution**
    • **四、Pod 反亲和性(Pod Anti-Affinity)**
      • **1. 硬策略:requiredDuringSchedulingIgnoredDuringExecution**
      • **2. 软策略:preferredDuringSchedulingIgnoredDuringExecution**
    • **五、拓扑域(Topology Key)**
    • **六、完整示例**
    • **七、总结**
    • 相关文献

配置说明

Kubernetes 亲和性配置详细说明

Kubernetes 的亲和性(Affinity)是一种调度策略,用于控制 Pod 调度到特定的节点或与其他 Pod 共存/分离。通过亲和性配置,可以优化资源分配、提高性能以及增强高可用性。


一、亲和性类型

Kubernetes 提供了两种主要类型的亲和性配置:

  1. Node Affinity(节点亲和性
    控制 Pod 调度到哪些节点上。

  2. Pod Affinity 和 Pod Anti-Affinity(Pod 亲和性和反亲和性
    控制 Pod 是否与某些已存在的 Pod 共存或分离。


二、节点亲和性(Node Affinity)

1. 硬策略:requiredDuringSchedulingIgnoredDuringExecution

  • 定义:必须满足条件,否则 Pod 不会被调度。
  • 示例
    假设我们希望 Pod 只能调度到标签为 disk-type=ssd 的节点上:
    affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: disk-typeoperator: Invalues:- ssd
    

2. 软策略:preferredDuringSchedulingIgnoredDuringExecution

  • 定义:优先选择符合条件的节点,但如果找不到符合条件的节点,Pod 仍然可以被调度到其他节点。
  • 示例
    假设我们希望 Pod 优先调度到标签为 cpu-num=16 的节点上:
    affinity:nodeAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1preference:matchExpressions:- key: cpu-numoperator: Invalues:- "16"
    

三、Pod 亲和性(Pod Affinity)

1. 硬策略:requiredDuringSchedulingIgnoredDuringExecution

  • 定义:Pod 必须与某些已存在的 Pod 共存,否则不会被调度。
  • 示例
    假设我们希望新 Pod 与标签为 app=my-app 的 Pod 共存:
    affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- my-apptopologyKey: kubernetes.io/hostname
    

2. 软策略:preferredDuringSchedulingIgnoredDuringExecution

  • 定义:优先将 Pod 调度到与某些已存在的 Pod 共存的节点上。
  • 示例
    假设我们希望新 Pod 优先与标签为 env=production 的 Pod 共存:
    affinity:podAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1podAffinityTerm:labelSelector:matchExpressions:- key: envoperator: Invalues:- productiontopologyKey: kubernetes.io/hostname
    

四、Pod 反亲和性(Pod Anti-Affinity)

1. 硬策略:requiredDuringSchedulingIgnoredDuringExecution

  • 定义:Pod 必须与某些已存在的 Pod 分离,否则不会被调度。
  • 示例
    假设我们希望新 Pod 不与标签为 app=my-app 的 Pod 共存:
    affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- my-apptopologyKey: kubernetes.io/hostname
    

2. 软策略:preferredDuringSchedulingIgnoredDuringExecution

  • 定义:优先将 Pod 调度到与某些已存在的 Pod 分离的节点上。
  • 示例
    假设我们希望新 Pod 优先不与标签为 env=production 的 Pod 共存:
    affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1podAffinityTerm:labelSelector:matchExpressions:- key: envoperator: Invalues:- productiontopologyKey: kubernetes.io/hostname
    

五、拓扑域(Topology Key)

在 Pod 亲和性和反亲和性中,topologyKey 定义了拓扑域的范围。常见的拓扑键包括:

  • kubernetes.io/hostname:表示单个节点。
  • failure-domain.beta.kubernetes.io/zone:表示可用区。
  • failure-domain.beta.kubernetes.io/region:表示区域。

例如,使用 failure-domain.beta.kubernetes.io/zone 可以实现跨可用区的调度策略。


六、完整示例

以下是一个综合使用节点亲和性和 Pod 亲和性的完整示例:

apiVersion: v1
kind: Pod
metadata:name: example-podlabels:app: example
spec:containers:- name: example-containerimage: nginxaffinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: disk-typeoperator: Invalues:- ssdpreferredDuringSchedulingIgnoredDuringExecution:- weight: 1preference:matchExpressions:- key: cpu-numoperator: Invalues:- "16"podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- my-apptopologyKey: kubernetes.io/hostnamepodAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1podAffinityTerm:labelSelector:matchExpressions:- key: envoperator: Invalues:- productiontopologyKey: kubernetes.io/hostname

七、总结

通过亲和性配置,可以灵活地控制 Pod 的调度行为,从而优化资源分配和提高系统的可靠性。以下是关键点:

  1. 节点亲和性:控制 Pod 调度到哪些节点。
  2. Pod 亲和性:控制 Pod 与哪些已存在的 Pod 共存。
  3. Pod 反亲和性:控制 Pod 与哪些已存在的 Pod 分离。
  4. 拓扑域:定义调度的范围(如节点、可用区或区域)。

根据实际需求,合理配置亲和性规则,能够显著提升 Kubernetes 集群的性能和稳定性。

相关文献

【Kubernets】Kubernets资源类型Deployment详细介绍


http://www.ppmy.cn/devtools/164520.html

相关文章

如何通过rust实现自己的web登录图片验证码

在进行web系统开发时,为保障系统登录安全,登录页面中的验证码必不可少。在java中,我们可以利用相应的2D图像库快速生成图形验证码,而对于rust,我们没有合适的标准库进行图像验证码的生成。今天,我们通过使用…

nuxt常用组件库html-validator、@nuxtjs/i18n、@nuxt/image、@unocss/nuxt使用解析

html-validator 主要用于自动验证nuxt服务器呈现的HTML(SSR和SSG),以检测可能导致水合错误的HTML常见问题,有助于减少水合错误,检测常见的可访问性错误。 安装 npx nuxilatest module add html-validator配置 若自动更新nuxt.config.ts配置文…

如何使用Spring Boot框架整合Redis:超详细案例教程

目录 # 为什么选择Spring Boot与Redis整合? 1. 更新 pom.xml 2. 配置application.yml 3. 创建 Redis 配置类 4. Redis 操作类 5. 创建控制器 6. 启动应用程序 7. 测试 # 为什么选择Spring Boot与Redis整合? 将Spring Boot与Redis整合可以充分利…

WPF创建DeepSeek本地自己的客户端-进阶版

本次文章接上次写的“基础版”继续 WPF快速创建DeepSeek本地自己的客户端-基础思路版本 1 开发环境与工具 开发工具:VS 2015 开发环境:.Net 4.0 使用技术:WPF 本章内容:WPF实现一个进阶版的DeepSeek客户端。 效果图如下&#x…

【入门Web安全之前端学习的侧重点和针对性的建议】

入门Web安全之前端学习的侧重点和针对性的建议 一、HTML:理解攻击载荷的载体二、CSS:次要但需警惕点击劫持三、JavaScript:渗透测试的核心重点四、浏览器工具:渗透测试的实战武器五、学习建议与资源六、总结:渗透测试者…

2025全开源Java多语言跨境电商外贸商城/Tk/FB内嵌商城I商家入驻I批量下单I完美运行

商城程序介绍: 2025全新版UI 新增全球多站点选择 PC端:vueelementui 用户端使用:uniapp 管理端使用:vueelementui 后台服务使用:springbootmybatisplusmysql 商城功能介绍: 商城含21种语言 代理…

【Docker】Dify+ollama+deepseek(打造本地私有化大模型)

最近很流行私有化部署dp,之前已经尝试过ollamawebuideepseek本地化部署,但是体验感官上不是很多,特别卡顿。然后今天突然了解到Dify,也支持私有化部署大模型。而且似乎功能更加强大,那不得实操一下啊。 1.初识Dify D…

奖学金(acwing)c++

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 55 名学生发奖学金。 期末,每个学生都有 33 门课的成绩:语文、数学、英语。 先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序&#xff0c…