Kubernetes(k8s):深入理解k8s中的亲和性(Affinity)及其在集群调度中的应用

Kubernetes(k8s):深入理解k8s中的亲和性(Affinity)及其在集群调度中的应用

  • 1、什么是亲和性?
  • 2、节点亲和性(Node Affinity)
    • 2.1 硬性节点亲和性规则(required)
    • 2.2 软性节点亲和性规则(preferred)
  • 3、Pod亲和性(Pod Affinity)
    • 3.1 Pod硬性亲和性规则
    • 3.2 Pod软性亲和性规则
  • 4、Pod 反亲和性(Pod Anti-Affinity)
  • 5、总结


💖The Begin💖点点关注,收藏不迷路💖

在 Kubernetes(K8s)集群中,亲和性(Affinity)是一项强大的功能,它允许我们通过标签选择器来指定 Pod 与节点或其他 Pod 之间的关系,以影响调度决策。

在这篇博客中,我们将深入探讨 Kubernetes 中的亲和性概念、不同类型的亲和性以及它们在集群调度中的应用。

1、什么是亲和性?

在Kubernetes中,亲和性是一种调度策略,用于指定Pod倾向于被调度到具有特定属性的节点。亲和性分为两种类型:

1、节点亲和性(Node Affinity):指定Pod倾向于被调度到具有特定标签或标签表达式的节点。
2、Pod亲和性(Pod Affinity):指定Pod倾向于与具有特定标签或标签表达式的其他Pod共存。

2、节点亲和性(Node Affinity)

节点亲和性允许我们指定 Pod 应该在哪些节点上运行。它可以根据节点的标签来决定 Pod 的调度位置。

节点亲和性规则可以是硬性的或软性的。硬性规则要求 Pod 必须在匹配的节点上运行,而软性规则则更加宽松,只是倾向于将 Pod 调度到符合条件的节点上。

2.1 硬性节点亲和性规则(required)

1、硬性规则指定了 Pod 必须被调度到满足规则条件的节点上,否则 Pod 将无法被调度和启动。

例如,可以使用硬性节点亲和性规则来确保 Pod 只能被调度到拥有特定标签的节点上。这在需要确保特定类型的节点才能运行某些任务时非常有用。

下面是一个示例 YAML 文件,其中定义了一个 Pod,并指定了硬性节点亲和性规则,要求 Pod 只能被调度到具有标签为 “gpu=true” 的节点上:

apiVersion: v1
kind: Pod
metadata:name: nginx-pod  # 定义 Pod 的名称为 "nginx-pod"
spec:containers:- name: nginx-container  # 定义 Pod 中的容器名称为 "nginx-container"image: nginx:latest  # 使用最新版本的 nginx 容器镜像affinity:nodeAffinity:  # 指定节点亲和性规则requiredDuringSchedulingIgnoredDuringExecution:  # 硬性节点亲和性规则,要求在调度过程中必须满足条件nodeSelectorTerms:  # 指定节点选择条件- matchExpressions:  # 指定匹配表达式- key: gpu  # 定义匹配表达式的键为 "gpu"operator: In  # 使用 In 操作符进行匹配values:  # 定义匹配的值- "true"  # 要求节点的标签中包含值为 "true" 的 "gpu" 标签

2.2 软性节点亲和性规则(preferred)

软性规则指定了 Pod 更倾向于被调度到满足规则条件的节点上,但并不强制要求。

例如,可以使用软性节点亲和性规则来指定 Pod 更倾向于被调度到某个特定区域的节点上,以减少数据传输延迟。

下面是一个示例 YAML 文件,其中定义了一个 Pod,并指定了软性节点亲和性规则,要求 Pod 更倾向于被调度到具有标签为 “zone=us-west” 的节点上:

apiVersion: v1
kind: Pod
metadata:name: nginx-pod  # Pod的名称
spec:containers:- name: nginx-container  # 容器的名称image: nginx-image  # 容器使用的镜像affinity:nodeAffinity:  # 节点亲和性preferredDuringSchedulingIgnoredDuringExecution:  # 在调度期间优先考虑,但在执行期间被忽略- weight: 1  # 权重为1,表示较高的优先级preference:  # 优先选择的条件matchExpressions:  # 匹配表达式列表- key: zone  # 标签的键operator: In  # 匹配操作符,表示在值列表中的任何一个values:- "us-west"  # 匹配的值为"us-west"

3、Pod亲和性(Pod Affinity)

Pod 亲和性允许我们指定 Pod 应该与哪些其他 Pod 共同运行。它可以确保相关的服务或组件在同一节点或不同节点上运行,以提高性能或可用性。与节点亲和性类似,Pod 亲和性规则也可以是硬性的或软性的。

3.1 Pod硬性亲和性规则

硬性亲和性规则指定了 Pod 必须满足的条件,如果这些条件不能满足,Pod 将不会被调度到任何节点上。

以下是一个使用硬性亲和性规则的示例,要求 Pod 只能被调度到具有 “zone=us-west” 和 “environment=production” 标签的节点上:

apiVersion: v1  # 指定 Kubernetes API 版本
kind: Pod  # 定义资源类型为 Pod
metadata:name: affinity-pod  # 指定 Pod 的名称为 affinity-pod
spec:containers:- name: affinity-container  # 定义 Pod 中的容器名称为 affinity-containerimage: affinity-image  # 指定容器所使用的镜像为 affinity-imageaffinity:  # 定义 Pod 的亲和性规则nodeAffinity:  # 指定节点亲和性规则requiredDuringSchedulingIgnoredDuringExecution:  # 指定为硬性节点亲和性规则nodeSelectorTerms:  # 指定节点选择器条件- matchExpressions:  # 指定匹配表达式- key: zone  # 指定节点标签的键为 zoneoperator: In  # 指定匹配操作符为 Invalues:  # 指定匹配的值- us-west  # 匹配值为 us-west- key: environment  # 指定节点标签的键为 environmentoperator: In  # 指定匹配操作符为 Invalues:  # 指定匹配的值- production  # 匹配值为 production

3.2 Pod软性亲和性规则

软性亲和性规则指定了 Pod 偏好的条件,如果这些条件可以满足,Pod 将会优先被调度到符合条件的节点上,但如果无法满足,Pod 仍然可以被调度到其他节点上。

以下是一个使用软性亲和性规则的示例,要求 Pod 偏好被调度到具有 “zone=us-east” 或 “zone=us-west” 标签的节点上:

apiVersion: v1  # 指定 Kubernetes API 版本
kind: Pod  # 定义资源类型为 Pod
metadata:name: affinity-pod  # 指定 Pod 的名称为 affinity-pod
spec:containers:- name: affinity-container  # 定义 Pod 中的容器名称为 affinity-containerimage: affinity-image  # 指定容器所使用的镜像为 affinity-imageaffinity:  # 定义 Pod 的亲和性规则nodeAffinity:  # 指定节点亲和性规则preferredDuringSchedulingIgnoredDuringExecution:  # 指定为软性节点亲和性规则- weight: 1  # 指定权重为 1preference:  # 指定偏好条件matchExpressions:  # 指定匹配表达式- key: zone  # 指定节点标签的键为 zoneoperator: In  # 指定匹配操作符为 Invalues:  # 指定匹配的值- us-east  # 匹配值为 us-east- weight: 1  # 指定权重为 1preference:  # 指定偏好条件matchExpressions:  # 指定匹配表达式- key: zone  # 指定节点标签的键为 zoneoperator: In  # 指定匹配操作符为 Invalues:  # 指定匹配的值- us-west  # 匹配值为 us-west

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

Pod 反亲和性(Pod Anti-Affinity)是一种 Kubernetes 调度策略,用于指定 Pod 不能被调度到与其他特定 Pod 相同的节点上。这有助于提高应用程序的可靠性和可用性,避免将相互依赖或相互竞争的 Pod 部署在同一节点上。

以下是一个 Pod 反亲和性的示例 :

要求该 Pod 不能被调度到具有标签 app=my-app 的其他 Pod 所在的节点上。这样可以确保这两个相互关联的 Pod 不会被部署在同一节点上,从而提高应用程序的可靠性。

apiVersion: v1  # 指定 Kubernetes API 版本
kind: Pod  # 定义资源类型为 Pod
metadata:name: anti-affinity-pod  # 指定 Pod 的名称为 anti-affinity-pod
spec:containers:- name: anti-affinity-container  # 定义 Pod 中的容器名称为 anti-affinity-containerimage: anti-affinity-image  # 指定容器所使用的镜像为 anti-affinity-imageaffinity:  # 定义 Pod 的亲和性规则podAntiAffinity:  # 指定 Pod 反亲和性规则requiredDuringSchedulingIgnoredDuringExecution:  # 指定为硬性 Pod 反亲和性规则- labelSelector:  # 指定标签选择器matchExpressions:  # 指定匹配表达式- key: app  # 指定标签的键为 appoperator: In  # 指定匹配操作符为 Invalues:  # 指定匹配的值- my-app  # 匹配值为 my-app

5、总结

在这里插入图片描述

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

paddle实现手写数字模型(一)

参考文档:paddle官网文档环境:Python 3.12.2 ,pip 24.0 ,paddlepaddle 2.6.0 python -m pip install paddlepaddle2.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple调试代码如下: LeNet.py import paddle import p…

013_NaN_in_Matlab中的非数与调试方法

Matlab中的非数与调试方法 是什么? Matlab编程(计算器使用)中经常有个错误给你,这句话里可能包含一个关键词NaN。大部分学生都有过被 NaN 支配的痛苦记忆。 NaN 是 Not a Number 的缩写,表示不是一个数字。在 Matla…

【SVN】clean up报错:Cleanup failed to process the following paths 解决方法

报错来源:代码更新有一个文件既不能接受自己的也不能接受别人的,只能取消,再提交提醒clean up,随后报标题错误。 解决方法:参考https://www.cnblogs.com/pinpin/p/11395438.html 注:如果clean up的时候有…

基于ssm项目校园快递平台系统

采用技术 基于SpringBoot框架实现的web的智慧社区系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员功能 订单管理 快递管理 公告管理 公告类…

基于YOLOv5s的电动车入梯识别系统(数据集+权重+登录界面+GUI界面+mysql)

本人训练的yolov5s模型,准确率在98.6%左右,可准确完成电梯内检测电动车任务,并搭配了GUI检测界面,支持权重选择、图片检测、视频检测、摄像头检测、识别结果拍照和在线标注数据集等功能。 共有4000张左右图片,全部为电…

机器人瓶胚检测工作站(H3U脉冲轴控制)

1、变量定义 2、程序监控1 2、 程序监控2 3、程序监控3 机器人输送料和机构的动作安全尤为重要,下面我们讨论下安全联锁控制逻辑

基于STM32F103单片机的时间同步项目

一、前言 本项目为前一个时间同步项目的更迭版本,由于之前的G031开发板没有外部晶振,从机守时能力几乎没有,5秒以上不同步从机时间就开始飞了。在考虑成本选型后,选择了带有外部有缘晶振的STM32F103C8T6最小单片机,来作…

解决mac本git安装后找不到命令的问题

不熟悉mac配置,折腾了半天,记录一下。 1.问题描述2.解决方法 1.问题描述 从https://sourceforge.net/projects/git-osx-installer/files/下载的git安装包: 安装时提示: 这里的解决办法是按住control键再打开文件安装。 安装完…

react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)

先看样子 组件代码: import React, { useState, useEffect } from react import { Row, Col, Modal, Spin, Input, Button, message, Form } from antd import { LockOutlined, EyeTwoTone, EyeInvisibleOutlined } from ant-design/icons import * as Serve from …

pyside6的QSpinBox自定义特性初步研究(二)

当前的需求是,蓝色背景的画面,需要一个相对应色系的QSpinBox部件。已有的部件风格是这样的,需要新的部件与之般配。 首先新建一个QDoubleSpinBox,并定义其背景色和边框: QDoubleSpinBox { color: white; border:1px…

基于无线物联网的智能配电监控系统设计应用

摘要:阐述基于电力物联网的智能配电监控系统的特点,探讨物联网结构及其关键技术,电力物联网下的智能配电监控系统设计,包括整体结构设计、硬件和软件系统设计。 安科瑞薛瑶瑶18701709087 关键词:电力物联网&#xff…

【好用】推荐10套后端管理系统前端模板

后台管理系统前端模板是开发者在构建后台管理系统时使用的一种工具,它提供了预先设计好的界面和组件,以帮助开发者快速搭建出功能完善、用户体验良好的管理系统。以下是V哥整理的10款流行的后台管理系统前端模板,它们基于不同的技术栈和设计理…

zookeeper分布式应用程序协调服务

一、zookeeper基本介绍 1.1 zookeeper的概念 Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。 是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、…

[Python图像识别] 五十二.水书图像识别 (2)基于机器学习的濒危水书古文字识别研究

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。目前我进入第二阶段Python图像识别,该部分主要以目标检测、图像…

CVPR 2024 | Retrieval-Augmented Open-Vocabulary Object Detection

CVPR 2024 - Retrieval-Augmented Open-Vocabulary Object Detection 论文:https://arxiv.org/abs/2404.05687代码:https://github.com/mlvlab/RALF原始文档:https://github.com/lartpang/blog/issues/13 本文提出了一种新的开放词汇目标检…

去除pycharm运行pytest的默认参数--no-header --no-summary -q

进入pycharm设置(Settings),找到高级设置(Advanced Settings)—>Python–>Pytest:不添加"–no-header --no-summary -q"(Pytest:do not add “–no-header --no-summary -q”)

2024年妈妈杯数学建模C题思路分析-物流网络分拣中心货量预测及人员排班

# 1 赛题 C 题 物流网络分拣中心货量预测及人员排班 电商物流网络在订单履约中由多个环节组成,图 ’ 是一个简化的物流 网络示意图。其中,分拣中心作为网络的中间环节,需要将包裹按照不同 流向进行分拣并发往下一个场地,最终使包裹…

Android中基于DWARF的stack unwind实现原理

一、简介 在软件开发中,unwind stack(栈回溯 或 调用栈展开)是调试和异常处理中至关重要的一环,通过理解其实现原理,可以更好地理解程序的执行流程,更有效地进行调试和错误排查。 本文主要介绍 AArch64 架构下的两种最典型的栈回溯…

RabbitMQ的介绍

为什么使用 MQ? 流量削峰和缓冲 如果订单系统最多能处理一万次订单,这个处理能力在足够应付正常时段的下单,但是在高峰期,可能会有两万次下单操作,订单系统只能处理一万次下单操作,剩下的一万次被阻塞。我们…

.NET JWT入坑

前言 JWT (JSON Web Token) 是一种安全传输信息的开放标准,由Header、Payload和Signature三部分组成。它主要用于身份验证、信息交换和授权。JWT可验证用户身份,确保访问权限,实现单点登录,并在客户端和服务器之间安全地交换信息…