k8s学习记录(五):Pod亲和性详解

一、前言

    上一篇文章初步探讨了 Kubernetes 的节点亲和性,了解到它在 Pod 调度上比传统方式更灵活高效。今天我们继续讨论亲和性同时Kubernetes 的调度机制。

二、Pod亲和性

     上一篇文章中我们介绍了节点亲和性,今天我们讲解一下Pod亲和性。首先我们先看下Pod亲和性的。使用命令 kubectl explain pods.spec.affinity.podAffinity

解释:

(1)Pod亲和性是Pod调度的规则,类例如将一类的Pod调度到相同的节点,和节点亲和性一样,Pod亲和性也是由一组调度规则组成。

(2)和节点亲和性类似,Pod亲和性也分为软亲和性硬亲和性

三、软亲和性详解

1、鉴于在上一篇文章中对节点软亲和性做了一些介绍,但是介绍的相对简单,所以本文打算深入的讲解一下软亲和性。

preferredDuringSchedulingIgnoredDuringExecution:软亲和性,从名字中就可以看出

preferred DuringScheduling:优先调度

IgnoredDuringExecution:运行期间忽略

所谓软亲和性是一种建议,建议调度器在调度Pod的时候遵守一定的规则去进行调度,如果没有符合条件的节点,则忽略异常。按照一定的规则(比如负载均衡等等)挑选一个节点部署。同时如果节点变更了导致不符合条件也不会将Pod驱逐。

2、继续深入这个字段,使用命令

kubectl explain pods.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution

描述:调度器会倾向于将 Pod 调度到满足该字段所指定的亲和性表达式的节点上,但它也可能会选择一个违反了一个或多个表达式的节点。最受青睐的节点是权重总和最大的那个节点。

简单来说:我们可以定义一系列的规则并且为每个规则设定一定的权重,例如

规则权重
rule11
rule22
rule33

假设我们先2个节点 node1和node2,其中node1符合规则1和2,node2符合规则1、3且不符合规则2。如下表格

节点满足条件违反规则权重得分
node1rule1、rule23
node2rule1、rule3rule24

虽然node2节点违反了rule1,但是由权重得分最高,pod也会被调度到node2。这就是软亲和性,一句话来说软亲和性是一种优先调度策略。

调度规则

我们继续查看如何编写调度规则,使用命令kubectl explain 查看podAffinityTerm字段,命令如下

kubectl explain pods.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm
FIELDS:labelSelector	<LabelSelector>.....篇幅限制,这里删除了描述,下同matchLabelKeys	<[]string>mismatchLabelKeys	<[]string>namespaceSelector	<LabelSelector>namespaces	<[]string>topologyKey	<string> -required-

(1)labelSelector:是一个标签选择器,用于筛选出满足特定标签条件的 Pod。案例:

labelSelector:matchLabels:app: web-server
##筛选出 label中包含 app=web-server 的节点

(2)matchLabelKeys:标签key的选择器,输入一直数组。案例:

matchLabelKeys:- test##筛选出包含label key 包含 test的节点

(3)mismatchLabelKeys:和matchLabelKeys刚好相反,不包含

(4)namespaceSelector:命名空间标签选择器,这里是通过命名空间包含的标签来做选择的

namespaceSelector:matchLabels:purpose: production#筛选出命名空间包含 标签 purpose=product的节点

(5)namespaces:命名空间选择器,选择包含指定命名空间的节点

namespaces:- dev- staging#筛选出包含命名空间 dev、staging的节点

(6)topologyKey(必填):是一个必需字段,它指定了节点标签的键。Kubernetes 根据这个标签键来确定节点的拓扑域,例如节点的主机名、可用区、机架等

topologyKey: kubernetes.io/hostname
权重:weight

权重就很好理解了,就是为规则设置权重(1-100),k8s匹配规则的时候会计算权重,对于软亲和性来说,权重最高的节点将会被选择。

四、硬亲和性详解

与软亲和性对应的是硬亲和性,requiredDuringSchedulingIgnoredDuringExecution

requiredDuringScheduling:调度期间必须满足

IgnoredDuringExecution:执行期间忽略

结合就是:调度期间必须满足条件,但是执行期间忽略。即当节点变更后导致不符合条件也不会把Pod驱逐

调度规则

查看描述使用命令

kubectl explain pods.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution
 labelSelector	<LabelSelector>matchLabelKeys	<[]string>mismatchLabelKeys	<[]string>namespaceSelector	<LabelSelector>namespaces	<[]string>topologyKey	<string> -required-

字段和上面一样,有一点不同的就是没有权重字段,这里不再赘述。硬亲和性要求是必须满足条件,否则无法调度,pod会一直处于Pending状态。如下图

五、总结:

总的来说,Kubernetes 中的 Pod 亲和性为我们提供了极为强大的 Pod 调度控制能力。软亲和性的灵活性与硬亲和性的严格性相互补充,让我们能够根据不同的业务场景和应用需求,精准地规划 Pod 在节点上的分布。这不仅优化了资源利用效率,还增强了系统的稳定性和容错性。希望对你有所帮助

六、未完待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS:Navigation实现导航之页面设置和路由操作

导读 设置标题栏模式设置菜单栏设置工具栏路由操作页面跳转页面返回页面替换页面删除移动页面参数获取路由拦截 子页面页面显示类型页面生命周期页面监听和查询 页面转场关闭转场自定义转场共享元素转场 跨包动态路由系统路由表自定义路由表 示例代码 Navigation组件适用于模块…

雪花算法

目录 一、什么是雪花算法 二、使用雪花算法 ​三、使用UUID 使用自增主键是数据库中常用的唯一标识&#xff0c;今天尝试使用mybatisplus来实现三种方式的主键ID 使用起来也很简单 用注解指定一下使用那种方式的主键 一、什么是雪花算法 一种特殊的算法可以计算得到一个唯…

HarmonyOs @hadss/hmrouter路由接入

参考文档&#xff1a;官方文档 在根目录oh-package.json5配置 {"dependencies": {"hadss/hmrouter": "^1.0.0-rc.11"} }加入路由编译插件 hvigor/hvigor-config.json文件 {"dependencies": {"hadss/hmrouter-plugin": &…

C++学习笔记(三十八)——STL之修改算法

STL 算法分类&#xff1a; 类别常见算法作用排序sort、stable_sort、partial_sort、nth_element等排序搜索find、find_if、count、count_if、binary_search等查找元素修改copy、replace、replace_if、swap、fill等修改容器内容删除remove、remove_if、unique等删除元素归约for…

Crawl4AI 部署安装及 n8n 调用,实现自动化工作流(保证好使)

Crawl4AI 部署安装及 n8n 调用&#xff0c;实现自动化工作流&#xff08;保证好使&#xff09; 简介 Crawl4AI 的介绍 一、Crawl4AI 的核心功能 二、Crawl4AI vs Firecrawl Crawl4AI 的本地部署 一、前期准备 二、部署步骤 1、检查系统的网络环境 2、下载 Crawl4AI 源…

32单片机——外部中断

STM32F103ZET6的系统中断有10个&#xff0c;外部中断有60个 1、中断的概念 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的&#xff0c;中断功能的存在&#xff0c;很大程度上提高了单片机处理外部或内部事件的能力 eg&#xff1a;&#xff1a;你打开火&…

UG NX二次开发(C#)-获取具有相同属性名称的体对象

文章目录 1、前言2、在UG NX中的属性的赋予3、通过UG NX二次开发获取相同属性的体对象1、前言 UG NX中每个对象都可以属于属性的,包括体、面、边、特征、基准等。在QQ群中有个群有提出一个问题,就是获取相同属性的体对象,然后将这个体对象导出到一个part文件中。我们今天先…

手动实现legend 与 echarts图交互 通过元素和js事件实现图标某项的高亮 显示与隐藏

通过html实现legend的样式 提供调用echarts的api实现与echarts图表交互的效果 实现饼图element实现类似于legend与echartstu表交互效果 效果图 配置代码 <template><div style"height: 400px; width: 500px;background-color: #CCC;"><v-chart:opti…

SpringBoot与BookKeeper整合,实现金融级别的日志存储系统

BookKeeper的优势 高吞吐量和低延迟 分布式架构: Apache BookKeeper采用分布式的架构设计&#xff0c;能够支持高并发的写入和读取操作。 批量写入: 支持批量写入日志条目&#xff0c;显著提高写入效率。 异步I/O: 使用异步I/O操作&#xff0c;减少等待时间&#xff0c;提升…

【Bug】 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

当你在进行深度学习相关操作时&#xff0c;若因缺少本地的 CA 证书而无法下载资源&#xff0c;下面为你介绍几种解决办法&#xff1a; 方法一&#xff1a;更新 CA 证书 在大多数 Linux 发行版中&#xff0c;你可以使用包管理器来更新 CA 证书。例如&#xff0c;在基于 Debian…

Vue3中AbortController取消请求的用法详解

在 Vue3 中&#xff0c;AbortController 用于取消 fetch 请求&#xff0c;避免组件卸载后仍执行异步操作导致的潜在问题&#xff08;如内存泄漏或更新已销毁组件的状态&#xff09;。以下是详细用法和最佳实践&#xff1a; 一、基本用法 创建 AbortController 实例 在组件 setu…

【刷题Day26】Linux命令、分段分页和中断(浅)

说下你常用的 Linux 命令&#xff1f; 文件与目录操作&#xff1a; ls&#xff1a;列出当前目录的文件和子目录&#xff0c;常用参数如-l&#xff08;详细信息&#xff09;、-a&#xff08;包括隐藏文件&#xff09;cd&#xff1a;切换目录&#xff0c;用于在文件系统中导航m…

Spring Boot 参考文档导航手册

&#x1f4da; Spring Boot 参考文档导航手册 &#x1f5fa;️ ✨ 新手入门 &#x1f476; 1️⃣ &#x1f4d6; 基础入门&#xff1a;概述文档 | 环境要求 | 安装指南 2️⃣ &#x1f527; 实操教程&#xff1a;上篇 | 下篇 3️⃣ &#x1f680; 示例运行&#xff1a;基础篇 …

卷积神经网络(CNN)详细教程

卷积神经网络&#xff08;CNN&#xff09;详细教程 一、引言 卷积神经网络&#xff08;Convolutional Neural Networks, CNN&#xff09;是一种深度学习模型&#xff0c;广泛应用于图像识别、视频分析、自然语言处理等领域。CNN通过模拟人类视觉系统的层次结构&#xff0c;能够…

解决SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption faile的问题

问题描述&#xff1a; 在pip安装第三方库时&#xff0c;出现SSL的问题。 传输层安全性协议&#xff08;TLS&#xff09;及其前身安全套接层&#xff08;SSL&#xff09;是现在的 HTTPS 协议中的一种安全协议&#xff0c;目的是为互联网通信提供安全及数据完整性保障。而较新版…

SpringBoot程序的创建以及特点,配置文件,LogBack记录日志,配置过滤器、拦截器、全局异常

目录 一、创建一个SpringBoot程序 二、SpringBoot的特点 ①主要特点 ②其他特点 ③热部署 启动热部署 关闭热部署 三、SpringBoot的配置文件 ①SpringBoot三种配置文件的格式&#xff08;以设置端口号为例&#xff09;&#xff1a; ②配置文件的优先级 ③常见配置项 1…

i18n-ai-translate开源程序,可以使用DeepSeek等模型将您的 i18nJSON翻译成任何语言

一、软件介绍 文末提供程序和源码下载 i18n-ai-translate开源程序使用 DeepSeek等模型可以将您的 i18n JSON 翻译成任何语言。 无缝翻译本地化文件。支持嵌套翻译文件的目录。需要i18next样式的JSON 文件&#xff08;文末一并提供下载&#xff09;。 二、模式 CSV 模式 三个…

Flask + ajax上传文件(一)--单文件上传

一、概述 本教程将教你如何使用Flask后端和AJAX前端实现文件上传功能,包含完整的代码实现和详细解释。 二、环境准备 1. 所需工具和库 Python 3.xFlask框架jQuery库Bootstrap(可选,用于美化界面)2. 安装Flask pip install flask三、项目结构 upload_project/ ├── a…

如何在 Postman 中,自动获取 Token 并将其赋值到环境变量

在 Postman 中&#xff0c;你可以通过 预请求脚本&#xff08;Pre-request Script&#xff09; 和 测试脚本&#xff08;Tests&#xff09; 实现自动获取 Token 并将其赋值到环境变量&#xff0c;下面是完整的操作步骤&#xff1a; ✅ 一、创建获取 Token 的请求 通常这个请求…

北斗导航 | 基于Transformer+LSTM+激光雷达的接收机自主完好性监测算法研究

基于Transformer+LSTM+激光雷达的接收机自主完好性监测算法研究 接收机自主完好性监测(RAIM)是保障全球导航卫星系统(GNSS)定位可靠性的核心技术。传统RAIM算法依赖最小二乘残差法,存在故障漏检、对复杂环境适应性差等问题。结合Transformer、LSTM与激光雷达的多模态融合…