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-container
    image: affinity-image  # 指定容器所使用的镜像为 affinity-image
  affinity:  # 定义 Pod 的亲和性规则
    nodeAffinity:  # 指定节点亲和性规则
      requiredDuringSchedulingIgnoredDuringExecution:  # 指定为硬性节点亲和性规则
        nodeSelectorTerms:  # 指定节点选择器条件
        - matchExpressions:  # 指定匹配表达式
          - key: zone  # 指定节点标签的键为 zone
            operator: In  # 指定匹配操作符为 In
            values:  # 指定匹配的值
            - us-west  # 匹配值为 us-west
          - key: environment  # 指定节点标签的键为 environment
            operator: In  # 指定匹配操作符为 In
            values:  # 指定匹配的值
            - 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-container
    image: affinity-image  # 指定容器所使用的镜像为 affinity-image
  affinity:  # 定义 Pod 的亲和性规则
    nodeAffinity:  # 指定节点亲和性规则
      preferredDuringSchedulingIgnoredDuringExecution:  # 指定为软性节点亲和性规则
      - weight: 1  # 指定权重为 1
        preference:  # 指定偏好条件
          matchExpressions:  # 指定匹配表达式
          - key: zone  # 指定节点标签的键为 zone
            operator: In  # 指定匹配操作符为 In
            values:  # 指定匹配的值
            - us-east  # 匹配值为 us-east
      - weight: 1  # 指定权重为 1
        preference:  # 指定偏好条件
          matchExpressions:  # 指定匹配表达式
          - key: zone  # 指定节点标签的键为 zone
            operator: In  # 指定匹配操作符为 In
            values:  # 指定匹配的值
            - 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-container
    image: anti-affinity-image  # 指定容器所使用的镜像为 anti-affinity-image
  affinity:  # 定义 Pod 的亲和性规则
    podAntiAffinity:  # 指定 Pod 反亲和性规则
      requiredDuringSchedulingIgnoredDuringExecution:  # 指定为硬性 Pod 反亲和性规则
      - labelSelector:  # 指定标签选择器
          matchExpressions:  # 指定匹配表达式
          - key: app  # 指定标签的键为 app
            operator: In  # 指定匹配操作符为 In
            values:  # 指定匹配的值
            - my-app  # 匹配值为 my-app

5、总结

在这里插入图片描述

在这里插入图片描述


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux 磁盘分区Inode使用率达到100%,导致网站无法创建文件报错 failed:No space leftondevice(

linux 磁盘分区Inode使用率达到100%,导致网站无法创建文件报错 failed:No space left on device 由于这问题直接导致了,网站无法正常运行! 提交工单求助阿里后,得到了答案! 工程师先让我执行 df -h 和 df -i 通过分析…

Harmony鸿蒙南向外设驱动开发-Codec

功能简介 OpenHarmony Codec HDI(Hardware Device Interface)驱动框架基于OpenMax实现了视频硬件编解码驱动,提供Codec基础能力接口给上层媒体服务调用,包括获取组件编解码能力、创建组件、参数设置、数据的轮转和控制、以及销毁…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题1

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题1 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 任务书,赛题,解析等资料,知识点培训服务 添加博主wx:liuliu548…

【微信小程序】canvas开发笔记

【微信小程序】canvasToTempFilePath:fail fail canvas is empty 看说明书 最好是先看一下官方文档点此前往 如果是canvas 2d 写canvas: this.canvas,,如果是旧版写canvasId: ***, 解决问题 修改对应的代码,如下所示,然后再试试运行&#x…

Java 基于微信小程序的汽车4S店客户管理小程序,附源码

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

Python——详细解析目标检测xml格式标注转换为txt格式

本文简述了目标检测xml格式标注的内容&#xff0c;以及yolo系列模型所需的txt格式标注的内容。并提供了一个简单的&#xff0c;可以将xml格式标注文件转换为txt格式标注文件的python脚本。 1. xml格式文件内容 <size>标签下为图片信息&#xff0c;包括 <width> …

排序算法之选择排序

目录 一、简介二、代码实现三、应用场景 一、简介 算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性选择排序O(n^2 )O(n^2)O(n^2)O(1)In-place不稳定 稳定&#xff1a;如果A原本在B前面&#xff0c;而AB&#xff0c;排序之后A仍然在B的前面&#xff1…

RREA论文阅读

Relational Reflection Entity Alignment 关系反射实体对齐 ABSTRACT 实体对齐旨在识别来自不同知识图谱(KG)的等效实体对&#xff0c;这对于集成多源知识图谱至关重要。最近&#xff0c;随着 GNN 在实体对齐中的引入&#xff0c;近期模型的架构变得越来越复杂。我们甚至在这…

低频电磁仿真 | 新能源汽车性能提升的利器

永磁同步电机 新能源汽车的心脏 近年来&#xff0c;全球变暖的趋势日益加剧&#xff0c;极端天气事件层出不穷&#xff0c;这些现象都反映出当前气候形势的严峻性。为了应对这一全球性挑战&#xff0c;各国纷纷采取行动&#xff0c;制定了一系列降碳、减碳的措施。中国在2020年…

PostgreSQL15 + PostGis + QGIS安装教程

目录 下载1、PostgreSQL安装1.1、环境变量配置 2、PostGIS安装2.1、安装插件 3、QGIS下载3.1、安装3.2、测试 下载 PostgreSQL15安装&#xff1a;下载地址 PostGIS安装&#xff1a;下载地址&#xff08;倒数第二个&#xff09; 1、PostgreSQL安装 下载安装包之后一直点下一步…

MySQL中的SQL高级语句[二]

使用语言 MySQL 使用工具 Navicat Premium 16 代码能力快速提升小方法&#xff0c;看完代码自己敲一遍&#xff0c;十分有用 拖动表名到查询文件中就可以直接把名字拉进来以下是使用脚本方法&#xff0c;也可以直接进行修改中括号&#xff0c;就代表可写可不写 有些地方的代…

基于单片机的智能锁芯报警系统设计

摘 要:在传统的智能锁芯报警系统中,存在响应时间较长的问题,为此,提出一种基于单片机的智能锁芯报警系统。通过控制模块、智能锁芯设置模块、报警模块、中断模块、液晶模块等,建立系统总体框架,根据系统总体框架,通过单片机、电源适配器、智能锁芯、报警器、LED灯等…

CMake构建OpenCv并导入QT项目过程中出现的问题汇总

前言 再此之前请确保你的环境变量是否配置&#xff0c;这是总共需要配置的环境变量 E:\cmake\bin E:\OpenCv\opencv\build\x64\vc15\bin F:\Qt\Tools\mingw730_64\bin F:\Qt\5.12.4\mingw73_64\bin 问题一&#xff1a; CMake Error: CMake was unable to find a build program…

Docker 学习笔记(七):介绍 Dockerfile 相关知识,使用 Dockerfile 构建自己的 centos 镜像

一、前言 记录时间 [2024-4-12] 系列文章简摘&#xff1a; Docker学习笔记&#xff08;二&#xff09;&#xff1a;在Linux中部署Docker&#xff08;Centos7下安装docker、环境配置&#xff0c;以及镜像简单使用&#xff09; Docker 学习笔记&#xff08;三&#xff09;&#x…

51单片机入门_江协科技_27~28_OB记录的自学笔记_AT24C02数据存储秒表

27. AT24C02(I2C总线) 27.1. 存储器介绍 27.2. 存储器简化模型介绍&#xff0c;存储原理 27.3. AT24C02介绍 •AT24C02是一种可以实现掉电不丢失的存储器&#xff0c;可用于保存单片机运行时想要永久保存的数据信息 •存储介质&#xff1a;E2PROM •通讯接口&#xff1a;I2…

ElasticSearch中使用bge-large-zh-v1.5进行向量检索(一)

一、准备 系统&#xff1a;MacOS 14.3.1 ElasticSearch&#xff1a;8.13.2 Kibana&#xff1a;8.13.2 BGE是一个常见的文本转向量的模型&#xff0c;在很多大模型RAG应用中常常能见到&#xff0c;但是ElasticSearch中默认没有。BGE模型有很多版本&#xff0c;本次采用的是bg…

【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件

【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件 往期回顾 【QT入门】Qt自定义控件与样式设计之QProgressBar用法及qss-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QSlider用法及qss-CSDN博客 【QT入门】Qt自定义控件与样式设计之qss的加载方式-CSDN博客 一、最终…

P6170 [USACO16FEB] Circular Barn G

题目 [ 传送门 ] 题目描述 作为当代建筑的爱好者&#xff0c;Farmer John 建造了一个圆形新谷仓&#xff0c;谷仓内部 个房间排成环形&#xff0c;按顺时针顺序编号为&#xff0c;每个房间都有通往与其相邻的左右房间的门&#xff0c;还有一扇门通往外面。 现在 FJ 有 n 头奶牛…

第六季:RTSP协议详解与实时流视频预览

目录 前言1 环境准备2 H.264编码原理和基本概念2.1 图像冗余信息2.2 h.264编码相关的一些概念2.3 h264视频流总体分析2.4 H264的NAL单元详解22.4.1 相关概念 2.5 NALU详解2.6 sps和pps详解2.7 H264的profile和level2.8 序列sequence 前言 本篇文章用于记录实验过程 1 环境准备…

Django中间件路由映射自动加/斜杠问题原因及分析

输入 http://127.0.0.1:8000/main/index/ 输入 http://127.0.0.1:8000/main/index 路由定义情况 urlpatterns [path("index/", views.index) ]可以发现我在输入URL的index路由时&#xff0c;如果没有和Django定义的路由匹配规则一样的话&#xff0c;浏览器自…