K8s Pod亲和性、污点、容忍度、生命周期与健康探测详解(上)

news2024/11/17 13:19:48

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

在上一章节中,我们详细探讨了Pod的概念、创建、生命周期、网络和存储等,本期将作为上期文章的补充,详细介绍 Pod亲和性、污点、容忍度、生命周期与健康探测等

目录

一、引言

1、Kubernetes与Pod的基本概述

2、Pod亲和性、污点、容忍度的重要性

3、Pod生命周期与健康探测的意义

二、Pod亲和性

1、Pod亲和性的概念与作用

2、节点亲和性与Pod间亲和性的区别

3、如何配置节点亲和性

4、如何配置Pod间亲和性

5、如何配置Pod间反亲和性

6、Pod亲和性的应用场景


一、引言

1、Kubernetes与Pod的基本概述

Kubernetes(常简称为K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它提供了许多功能,如自我修复、水平扩展、服务发现和负载均衡等,使得在集群环境中运行容器化应用程序变得更加简单和高效。

Pod是Kubernetes中最小的部署单元,也是其他Kubernetes对象的基本构建块。一个Pod可以包含一个或多个紧密相关的容器,这些容器共享存储、网络、运行时配置等资源,并且一起被调度到集群中的一个节点上运行。Pod中的容器共享相同的网络命名空间,因此它们可以通过localhost进行通信。同时,Pod也作为集群管理的最小单位,提供了更高的管理粒度。

2、Pod亲和性、污点、容忍度的重要性

Pod亲和性:Pod亲和性允许用户根据特定规则将Pod调度到集群中的节点上。这有助于优化资源利用、提高性能并满足应用程序的特定需求。

污点(Taints):污点是定义在节点上的键值对,用于表示节点上的某些不期望的特性或限制。这使得节点能够主动拒绝不符合条件的Pod的调度,从而确保节点资源不被不适合的Pod占用。

容忍度(Tolerations):容忍度是定义在Pod上的键值对,允许Pod容忍节点的污点,从而可以被调度到带有污点的节点上。这增加了Pod调度的灵活性,使其能够适应集群中不同节点的特性。

3、Pod生命周期与健康探测的意义

Pod生命周期在Kubernetes中指的是Pod从创建到终止的整个过程,包括初始化容器、主容器的运行、容器启动后和终止前的钩子执行,以及容器的存活性探测和就绪性探测等阶段。每个阶段都有其特定的作用和目的,共同确保了Pod在集群中的正常运行和有效管理。

健康探测则是Kubernetes保证Pod及其中容器运行状态的重要手段。通过存活性探针和就绪性探针,Kubernetes能够实时检测Pod及容器的运行状态,一旦发现异常,便采取相应的措施,如重启容器或剔除异常实例,以保证服务的可用性和稳定性。

二、Pod亲和性

1、Pod亲和性的概念与作用

Pod 亲和性(Affinity)是 Kubernetes 中的一个重要概念,它用来指定 Pod 与节点之间的关系,即规定 Pod 应该被调度到哪些节点上运行。Pod 亲和性可以分为两种类型:Node Affinity(节点亲和性)Pod Affinity(Pod 亲和性)

1. 节点亲和性(Node Affinity): 通过节点亲和性,可以指定 Pod 与节点的关系,使得 Pod 被调度到满足指定条件的节点上运行。Node Affinity 可以分为以下几种类型:

  • requiredDuringSchedulingIgnoredDuringExecution:表示 Pod 必须被调度到满足指定条件的节点上运行,如果没有满足条件的节点,则 Pod 将一直处于 Pending 状态。
  • preferredDuringSchedulingIgnoredDuringExecution:表示 Pod 倾向于被调度到满足指定条件的节点上运行,但如果没有满足条件的节点,也可以被调度到其他节点上运行。

2. Pod 亲和性(Pod Affinity): 通过 Pod 亲和性,可以指定 Pod 与其他 Pod 的关系,使得同一组或相关的 Pod 被调度到同一节点上运行,或者避免相互冲突的 Pod 被调度到同一节点上运行。Pod Affinity 可以分为以下几种类型:

  • requiredDuringSchedulingIgnoredDuringExecution:表示 Pod 必须与满足指定条件的其他 Pod 被调度到同一节点上运行,如果没有满足条件的其他 Pod,则 Pod 将一直处于 Pending 状态。
  • preferredDuringSchedulingIgnoredDuringExecution:表示 Pod 倾向于与满足指定条件的其他 Pod 被调度到同一节点上运行,但如果没有满足条件的其他 Pod,也可以被调度到其他节点上运行。

※require表示必须有节点满足这个位置定义的亲和性,这是个硬性条件,硬亲和性

※prefered表示有节点尽量满足这个位置定义的亲和性,这不是一个必须的条件,软亲和性

3. 节点反亲和性(Node Anti-Affinity): 通过节点反亲和性,可以指定 Pod 应该避免被调度到满足指定条件的节点上运行。与节点亲和性相似,节点反亲和性也可以分为 requiredDuringSchedulingIgnoredDuringExecution 和 preferredDuringSchedulingIgnoredDuringExecution 两种类型。

4. Pod 反亲和性(Pod Anti-Affinity): 通过 Pod 反亲和性,可以指定 Pod 应该避免与满足指定条件的其他 Pod 被调度到同一节点上运行。与 Pod 亲和性相似,Pod 反亲和性也可以分为 requiredDuringSchedulingIgnoredDuringExecution 和 preferredDuringSchedulingIgnoredDuringExecution 两种类型。

Pod 亲和性的作用主要体现在以下几个方面:

  • 性能优化: 可以将相关的 Pod 部署到同一节点上,从而提高数据访问的效率和性能。
  • 故障隔离: 可以将同一应用程序的多个副本部署到不同的节点上,以实现故障隔离和高可用性。
  • 资源利用: 可以根据节点的硬件配置和资源使用情况,将 Pod 部署到最合适的节点上,以实现资源的最优分配和利用。

2、节点亲和性与Pod间亲和性的区别

节点亲和性(Node Affinity)和 Pod间亲和性(Pod Affinity)是 Kubernetes 中两种不同的调度策略,它们分别用于指定 Pod 与节点之间的关系和 Pod 与其他 Pod 之间的关系。

1. 节点亲和性(Node Affinity):

  • 作用: 用于指定 Pod 应该被调度到哪些节点上运行。
  • 类型: 包括 requiredDuringSchedulingIgnoredDuringExecution 和 preferredDuringSchedulingIgnoredDuringExecution 两种类型。
  • 使用场景: 当需要控制 Pod 在集群中的调度位置时,可以使用节点亲和性。例如,根据节点的硬件配置、地理位置或其他属性,将 Pod 调度到满足指定条件的节点上运行。

2. Pod间亲和性(Pod Affinity):

  • 作用: 用于指定 Pod 与其他 Pod 之间的关系,即 Pod 应该与哪些其他 Pod 被调度到同一节点上运行。
  • 类型: 包括 requiredDuringSchedulingIgnoredDuringExecution 和 preferredDuringSchedulingIgnoredDuringExecution 两种类型。
  • 使用场景: 当需要将相关的 Pod 部署到同一节点上运行时,可以使用 Pod间亲和性。例如,将同一应用程序的多个副本部署到同一节点上,以实现故障隔离、性能优化或其他目的。

3、如何配置节点亲和性

要配置节点亲和性(Node Affinity),可以在 Pod 的定义中使用 affinity 字段,并在其中指定 nodeAffinity 字段。以下是一个示例 YAML 文件,展示了如何配置节点亲和性:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: <node-label-key>
            operator: In
            values:
            - <node-label-value>

  •  <node-label-key><node-label-value> 表示要匹配的节点标签的键和值。可以根据需要设置节点标签,例如节点的地理位置、硬件类型等。
  • requiredDuringSchedulingIgnoredDuringExecution 表示 Pod 必须满足指定的节点亲和性条件才能被调度。如果没有满足条件的节点,则 Pod 将一直处于 Pending 状态,直到满足条件的节点可用为止。

通过配置节点亲和性,可以控制 Pod 被调度到哪些节点上运行,从而实现资源的最优分配和利用。请根据您的实际需求和集群环境进行配置。

4、如何配置Pod间亲和性

要配置 Pod 间亲和性(Pod Affinity),可以在 Pod 的定义中使用 affinity 字段,并在其中指定 podAffinity 字段。以下是一个示例 YAML 文件,展示了如何配置 Pod 间亲和性:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: <pod-label-key>
            operator: In
            values:
            - <pod-label-value>
        topologyKey: <topology-key>

  • <pod-label-key> <pod-label-value> 表示您要匹配的 Pod 标签的键和值。您可以根据需要设置 Pod 标签,例如应用程序类型、部门信息等。
  • <topology-key> 表示拓扑域的键,用于指定在哪个拓扑域内查找匹配的 Pod。拓扑域可以是节点、机架、区域等。
  • requiredDuringSchedulingIgnoredDuringExecution 表示 Pod 必须满足指定的条件才能被调度或保持运行。如果没有满足条件的 Pod,则 Pod 将一直处于 Pending 状态或者被驱逐。

5、如何配置Pod间反亲和性

配置Pod间反亲和性与上面的Pod间亲和性YAML写法基本一致,不同的是将podAffinity更换成了podAntiAffinity

下面是一个示例:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: <pod-label-key>
            operator: In
            values:
            - <pod-label-value>
        topologyKey: <topology-key>

通过配置 Pod 间反亲和性,可以控制相关的 Pod 是否应该被调度到同一节点上运行,以实现故障隔离、性能优化或其他目的。

6、Pod亲和性的应用场景

  1. 高可用性: 将同一应用程序的多个副本部署到不同的节点上,以提高应用程序的可用性。通过配置 Pod 间亲和性,可以将相关的 Pod 部署到同一节点上,从而实现故障隔离和容错能力。
  2. 性能优化: 将需要频繁通信或共享资源的相关应用程序部署到同一节点上,以减少网络延迟和资源访问时间。通过配置 Pod 间亲和性,可以将相关的 Pod 部署到同一节点上,提高应用程序的性能和响应速度。
  3. 数据局部性: 在分布式系统中,经常需要处理大量的数据和计算任务。通过配置 Pod 间亲和性,可以将相关的数据处理任务部署到同一节点上,以减少数据传输和计算开销,提高系统的数据局部性和处理效率。
  4. 资源隔离: 在多租户环境中,不同的应用程序可能会共享同一集群资源。通过配置 Pod 间反亲和性,可以将不同应用程序的相关 Pod 部署到不同的节点上,以避免资源竞争和性能干扰,实现资源的有效隔离和管理。

假设有一个微服务架构的应用程序,其中包括多个服务,如用户服务、订单服务和支付服务等。这些服务之间需要频繁通信和共享数据。为了提高系统的性能和可用性,可以将相关服务的 Pod 配置为具有亲和性,使它们被调度到同一节点上运行。例如,将用户服务和订单服务的 Pod 配置为具有亲和性,以减少服务之间的网络延迟和通信开销,提高系统的响应速度和性能。

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!  

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

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

相关文章

linux X11窗口开发

X11 控制窗口 窗口信息查询 检索窗口信息工具 xprop xprop执行后会出现一个光标&#xff0c;这个光标可以获取到窗口信息 X11 获取窗口信息&#xff0c;操作窗口 X11 遍历获取当前显示窗口的标题 _NET_WM_NAME, 置顶模拟键盘输入操作 开发依赖 apt install libX11-dev l…

【前端Vue】社交信息头条项目完整笔记第2篇:二、登录注册,准备【附代码文档】

社交媒体-信息头条项目完整开发笔记完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;一、项目初始化使用 Vue CLI 创建项目,加入 Git 版本管理,调整初始目录结构,导入图标素材,引入 Vant 组件库,移动端 REM 适配,关于 , 配置文件,封装请求模块。十、用户关…

LeetCode-1669题:合并两个链表(原创)

【题目描述】 给你两个链表 list1 和 list2 &#xff0c;它们包含的元素分别为 n 个和 m 个。请你将 list1 中下标从 a 到 b 的全部节点都删除&#xff0c;并将list2 接在被删除节点的位置。下图中蓝色边和节点展示了操作后的结果&#xff1a; 请你返回结果链表的头指针。 【…

10 - Debian如何让特定用户切换root身份

作者&#xff1a;网络傅老师 特别提示&#xff1a;未经作者允许&#xff0c;不得转载任何内容。违者必究&#xff01; Debian如何让特定用户切换root身份 《傅老师Debian小知识库系列之10》——原创 前言 傅老师Debian小知识库特点&#xff1a; 1、最小化拆解Debian实用技能…

LNMP架构之mysql数据库实战

mysql安装 到官网www.mysql.com下载源码版本 实验室使用5.7.40版本 tar xf mysql-boost-5.7.40.tar.gz #解压 cd mysql-boost-5.7.40/ yum install -y cmake gcc-c bison #安装依赖性 cmake -DCMAKE_INSTALL_PREFIX/usr/local/mysql -DMYSQL_DATADIR/data/mysql -DMYSQL_…

MySQL为什么会选错索引

在平时不知道一有没有遇到过这种情况&#xff0c;我明明创建了索引&#xff0c;但是MySQL为何不用索引呢&#xff1f;为何要进行全索引扫描呢&#xff1f; 一、对索引进行函数操作 假设现在维护了一个交易系统&#xff0c;其中交易记录表 tradelog 包含交易流水号(tradeid)、交…

【分布式计算框架】Hadoop伪分布式安装

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎 ❤️关注 &#x1f44d;点赞 &#x1f64c;收藏 ✍️留言 文章目录 Hadoop伪分布式安装一、实验目的二、实验环境三、实验内容基本任务1&#xff1a;安装Linux虚拟机(至…

[Vue3] 配置 Pinia 并存储、读取、修改数据 | 集中式状态(数据)管理

安装 npm i pinia main.ts import ./assets/main.cssimport { createApp } from vue import App from ./App.vue import { createPinia } from pinia // 引入Pinia// 创建一个应用 const app createApp(App)const pina createPinia() app.use(pina) // 挂载整个应用到app容器…

『Apisix进阶篇』动态负载均衡:APISIX的实战演练与策略应用

&#x1f680;『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 &#x1f4e3;读完这篇文章里你能收获到 &#x1f3af; 掌握APISIX中多种负载均衡策略的原理及其适用场景。&#x1f4c8; 学习如何通过APISIX的Admin API和Dashboard进行负…

AIGC趋势下软件工程强智能编码来临了么?

一、背景 在AIGC&#xff08;AI Generated Content&#xff0c;人工智能生成内容&#xff09;的趋势下&#xff0c;软件工程领域的“强智能编码”是指通过深度学习、自然语言处理等前沿技术&#xff0c;使AI具备理解、学习、推理和生成代码的能力&#xff0c;从而实现自动化或…

操作系统:经典进程同步问题的高级探讨

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

ChatGPT提升工作生产力方法和技巧ChatGPT enhances work productivity methods and techniques

使用ChatGPT提升工作效率的一些详细步骤和技巧&#xff1a; 1. 快速撰写和编辑文档 撰写文档&#xff1a;当需要撰写报告、方案、邮件等内容时&#xff0c;可以直接向ChatGPT提出请求&#xff0c;例如&#xff1a;“请帮我写一份关于第一季度销售业绩的总结报告。”之后&#x…

Mybatis-plus + 通用mapper(tk.mybatis)

推荐课程&#xff1a;MyBatisPlus实战教程02-课程介绍与案例演示_哔哩哔哩_bilibili 官网&#xff1a;MyBatis-Plus (baomidou.com) 目录 01 引言 1&#xff09;MyBatis与MyBatis-Plus区别 2&#xff09;Mybatis-plus入门案例 案例一&#xff1a;spring容器版本的案例 案例…

将二进制数a的每一位右移b位operator.rshift(a,b)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将二进制数a的 每一位右移b位 operator.rshift(a,b) [太阳]选择题 请问执行operator.rshift(4, 1)的结果为&#xff1f; import operator print("【显示】二进制2&#xff1a;",bi…

Tuxera for Mac2024免费读写硬盘U盘工具

作为软件产品专家&#xff0c;我对各类软件都有较为深入的了解&#xff0c;下面介绍Tuxera for Mac这款读写硬盘/U盘工具的相关信息&#xff1a; Tuxera for Mac是一款高效稳定的NTFS读写工具&#xff0c;专为解决Mac系统无法直接读写NTFS格式驱动器的问题而设计。它提供了完整…

【文献分享】FLUNED(一种用于流体活化计算的开源工具)在水中的开发和验证

题目&#xff1a;Development and validation in water of FLUNED, an open-source tool for fluid activation calculations 链接&#xff1a;Redirecting FLUNED&#xff08;一种用于流体活化计算的开源工具&#xff09;在水中的开发和验证 在核聚变装置中&#xff0c;高…

【数据结构】树、二叉树与堆(长期维护)

下面是关于树、二叉树、堆的一些知识分享&#xff0c;有需要借鉴即可。 一、初识树&#xff08;了解即可&#xff09; 1.树的概念 概念&#xff1a;一种非线性数据结构&#xff0c;逻辑形态上类似倒挂的树 树的构成&#xff1a;由一个根左子树右子树构成&#xff0c;其中子树…

布隆过滤器详讲

本文旨在讲解布隆过滤器的原理以及实现方式&#xff0c;希望通过本文能使读者对布隆过滤器有一定的认识&#xff01; 一、布隆过滤器的引入 在讲解布隆过滤器之前&#xff0c;我们还是先提及一下前面讲的位图行&#xff0c;位图可以处理大量的数据&#xff0c;广泛用于查找等…

Vue-vue3

一、Vue3简介二、Vue3有那些优化性能的提升源码升级拥抱TypeScript新的特性 三、创建Vue3.0工程四、Vue3工程结构&#xff08;使用cli创建的vue3&#xff09;五、常用的Composition API&#xff08;组合式API&#xff09;setupsetup的两个注意点 ref函数reactive函数Vue3.0中的…

【Java程序设计】【C00381】基于(JavaWeb)Springboot的爱心商城管理系统(有论文)

【C00381】基于&#xff08;JavaWeb&#xff09;Springboot的爱心商城管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#x…