当前位置: 首页 > news >正文

k8s 亲和性之Affinity

文章目录

      • 1. Node Affinity(节点亲和性)
        • 节点亲和性类型
        • 配置示例
        • 常见场景:
      • 2. Pod Affinity 和 Pod Anti-Affinity
        • Pod Affinity 配置示例
        • Pod Anti-Affinity 配置示例
        • 常见场景:
      • 3. 亲和性规则概述
      • 4. 亲和性和反亲和性的细节
      • 5. 亲和性配置的示例
        • Pod 与 Node Affinity
        • Pod 与 Pod Affinity
      • 总结

在 Kubernetes 中,亲和性(Affinity)是一个强大的调度机制,用于控制 Pod 调度到哪些节点或与哪些其他 Pods 一起运行。亲和性帮助你在 Kubernetes 集群中实现更灵活、更高效的资源调度,支持多种不同的场景,如负载均衡、资源隔离、容错等。

亲和性有两种类型:

  1. Node Affinity(节点亲和性)
  2. Pod Affinity 和 Pod Anti-Affinity(Pod 亲和性与反亲和性)

1. Node Affinity(节点亲和性)

Node Affinity 用于约束 Pod 可以调度到哪些节点。它是 nodeSelector 的扩展,提供了更灵活的匹配机制。通过设置节点亲和性,Pod 可以根据节点的标签来选择适合的节点进行调度。

节点亲和性类型

Node Affinity 分为两种类型:

  • requiredDuringSchedulingIgnoredDuringExecution:在调度时必须满足的条件,意味着如果节点不满足这些条件,Pod 就无法调度到该节点。
  • preferredDuringSchedulingIgnoredDuringExecution:调度时尽量满足的条件,但如果无法满足条件,Pod 仍然会被调度到其他节点。
配置示例
affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: "kubernetes.io/hostname"operator: Invalues:- node-1- node-2preferredDuringSchedulingIgnoredDuringExecution:- weight: 1preference:matchExpressions:- key: "disk"operator: Invalues:- ssd
  • requiredDuringSchedulingIgnoredDuringExecution:指定节点必须满足的条件。在这个例子中,Pod 只能调度到 node-1node-2 节点上。
  • preferredDuringSchedulingIgnoredDuringExecution:表示推荐的调度优先条件。在这个例子中,节点如果具有 disk=ssd 标签,会更倾向于调度,但不是强制要求。
常见场景:
  • 资源约束:需要特定硬件(例如 GPU 或 SSD 硬盘)的 Pod 必须调度到支持该硬件的节点。
  • 环境隔离:将某些 Pods 部署到特定的可用区或区域,例如将数据库 Pod 放到具有高内存节点的区域。

2. Pod Affinity 和 Pod Anti-Affinity

Pod AffinityPod Anti-Affinity 控制 Pod 如何与其他 Pods 一起调度。它们允许你根据其他 Pods 的位置来影响当前 Pod 的调度。

  • Pod Affinity(Pod 亲和性):表示你希望某个 Pod 与其他特定 Pod 在同一节点上调度。例如,如果你希望某些 Pods 共享同一个节点,以便它们之间有低延迟的通信,可以使用 Pod 亲和性。

  • Pod Anti-Affinity(Pod 反亲和性):与 Pod 亲和性相反,表示你希望某些 Pod 不与其他特定 Pod 在同一节点上调度。例如,如果你希望某些 Pod 避免在同一节点上运行,以确保高可用性或隔离性,可以使用 Pod 反亲和性。

Pod Affinity 配置示例
affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app: myapptopologyKey: "kubernetes.io/hostname"

这个例子表示,如果节点上有 app=myapp 标签的 Pod,则会优先调度当前 Pod 到同一节点上。topologyKey 是用来定义约束的范围,kubernetes.io/hostname 表示节点级别的约束。

Pod Anti-Affinity 配置示例
affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app: myapptopologyKey: "kubernetes.io/hostname"

这个例子表示,如果节点上已经有 app=myapp 标签的 Pod,新的 Pod 就不会被调度到该节点上。

常见场景:
  • Pod Affinity

    • 将需要高频通信的 Pods 部署到同一节点,以减少网络延迟。例如,在微服务架构中,前端和后端服务可以被调度到相同节点上以提高通信效率。
  • Pod Anti-Affinity

    • 确保多个副本的 Pods 不会被调度到同一节点,以避免单点故障。例如,确保多个数据库副本的 Pods 分布在不同的节点上,以提高容错性。

3. 亲和性规则概述

亲和性规则的配置可以在 Pod 的 affinity 字段中指定,通常包括以下几个部分:

  • requiredDuringSchedulingIgnoredDuringExecution:表示在 Pod 调度时必须满足的条件。可以用 nodeAffinitypodAffinitypodAntiAffinity 来定义。
  • preferredDuringSchedulingIgnoredDuringExecution:表示尽量满足的条件,如果不满足,也不会阻止调度,但会影响调度优先级。
  • topologyKey:用于定义约束的范围,例如使用 kubernetes.io/hostname 来指定节点级别的约束,或者使用可用区等来实现跨区域调度。

4. 亲和性和反亲和性的细节

  • topologyKey:决定了亲和性约束的范围。常见的 topologyKey 值有:

    • kubernetes.io/hostname:表示节点级别的亲和性。
    • failure-domain.beta.kubernetes.io/zone:表示区域级别的亲和性,用于跨区域调度。
    • topology.kubernetes.io/region:表示区域级别的亲和性,用于跨区域调度。
  • operator:用于匹配条件的操作符,常见的有:

    • In:匹配指定的值。
    • NotIn:排除指定的值。
    • Exists:仅匹配标签存在的节点或 Pod。
    • DoesNotExist:仅匹配标签不存在的节点或 Pod。

5. 亲和性配置的示例

Pod 与 Node Affinity

将一个 Pod 调度到具有特定标签的节点上:

apiVersion: v1
kind: Pod
metadata:name: mypod
spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: "disktype"operator: Invalues:- ssd

这个例子要求 Pod 被调度到 disktype=ssd 的节点上。

Pod 与 Pod Affinity

将某个 Pod 调度到有特定标签的 Pod 所在的节点:

apiVersion: v1
kind: Pod
metadata:name: mypod
spec:affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app: myapptopologyKey: "kubernetes.io/hostname"

这个配置要求将 Pod 调度到与标签为 app=myapp 的 Pod 相同节点上。

总结

Kubernetes 中的亲和性(Affinity)机制提供了灵活的调度策略,帮助我们实现更高效的资源利用、负载均衡、故障隔离等。通过结合 Node AffinityPod Affinity/Anti-Affinity,你可以精细地控制 Pod 的调度行为,满足不同应用场景的需求。

相关文章:

k8s 亲和性之Affinity

文章目录 1. Node Affinity(节点亲和性)节点亲和性类型配置示例常见场景: 2. Pod Affinity 和 Pod Anti-AffinityPod Affinity 配置示例Pod Anti-Affinity 配置示例常见场景: 3. 亲和性规则概述4. 亲和性和反亲和性的细节5. 亲和性…...

SpringBoot 插件化开发模式

一、前言 1.1 使用插件的好处 1.1.1 模块解耦 实现服务模块之间解耦的方式有很多,但是插件来说,其解耦的程度似乎更高,而且更灵活,可定制化、个性化更好。 举例来说,代码中可以使用设计模式来选择使用哪种方式发送…...

基于树莓派的安保巡逻机器人--项目介绍

目录 一、项目简介 二、项目背景 三、作品研发技术方案 作品主要内容: 方案的科学性 设计的合理性 四、作品创新性及特点 五、作品自我评价 本篇为项目“基于树莓派的安保巡逻机器人”介绍博客 演示视频链接: 基于树莓派的安保巡逻机器人_音游…...

Python学习笔记8-函数1

自定义函数 def 函数名(形参):函数体return 空/变量/对象/表达式 形参:函数定义时声明的参数实参:函数调用时传入的参数。函数只需要定义一次,就可以被多次使用当函数被调用时,才执行函数体,定义时不执行 文档注释 …...

如何使用ST7789展现图片?[ESP--4]

本节我们继续ESP和ST 7789的话题,这节课我们来学学如何展示图片,话不多说,先上效果 好,教程开始~前情提要,要看懂这篇,建议搭配楼主的前两期文章 使用ESP32驱动LCD-ST7789屏幕[ESP–2] 加速你的LCD-ST7789屏幕&#xf…...

【QNX+Android虚拟化方案】129 - USB眼图参数配置

【QNX+Android虚拟化方案】129 - USB眼图参数配置 1. 软件侧dts如何配置眼图参数 及 其对应关系2. 硬件 QNX 侧调试眼图命令2.1 High Speed USB2.0 Host2.2 Super Speed USB3.0 Host3. 硬件 Android 侧调试眼图命令基于原生纯净代码,自学总结 纯技术分享,不会也不敢涉项目、不…...

【机器学习】探索机器学习决策树算法的奥秘

决策树 前言基本概念常见的决策树算法ID3算法C4.5算法CART算法 决策树的优缺点应用场景决策树的可视化总结 前言 在当今这个数据驱动的时代,机器学习作为数据分析与预测的利器,正以前所未有的速度改变着我们的生活和工作方式。在众多机器学习算法中&…...

K8S版本和istio版本的对照关系

版本对照关系 下载地址1 下载地址2...

嵌入式硬件实战提升篇(三)商用量产电源设计方案 三路电源输入设计 电源管理 多输入供电自动管理 DCDC降压

引言:本文你能实际的了解到实战量产产品中电源架构设计的要求和过程,并且从实际实践出发搞懂电源架构系统,你也可以模仿此架构抄板到你自己的项目,并结合硬件篇之前的项目以及理论形成正真的三路电源输入设计与开发板电源架构块供…...

【机器学习】机器学习的基本分类-监督学习-逻辑回归-Sigmoid 函数

Sigmoid 函数是一种常用的激活函数,尤其在神经网络和逻辑回归中扮演重要角色。它将输入的实数映射到区间 (0, 1),形状类似于字母 "S"。 1. 定义与公式 Sigmoid 函数的公式为: 特点 输出范围:(0, 1),适合用…...

EasyDarwin搭建直播推流服务

学习链接 easydarwin官网 - 这里看介绍 easydarwin软件下载地址 - 百度网盘 easydarwin视频 B站 文章目录 学习链接使用下载EasyDarwin压缩包,并解压到目录启动EasyDarwin点播直播easyplayer.jsapidocffmpeg推流rtsp & ffplay拉流 使用 下载EasyDarwin压缩包…...

无人机数据处理系统:原理与核心系统

一、数据处理系统的运行原理 数据获取:无人机在飞行过程中,通过搭载的传感器(如相机、激光雷达等)采集到各种类型的数据,例如图像、点云等。这些数据是后续处理和分析的基础。 数据传输:采集到的数据会通…...

DLL中的inline static成员变量:Windows开发中的常见陷阱

在Windows平台进行C开发时,DLL(动态链接库)是一个非常重要的概念。它让我们能够实现代码的模块化和动态加载,提高了程序的灵活性和维护性。然而,当我们在DLL中使用C17引入的inline static成员变量时,可能会…...

pandas 读写excel

在Python中,使用Pandas库读写Excel文件是一个常见的操作。Pandas提供了read_excel和to_excel方法来分别实现读取和写入Excel文件的功能。以下是一些基本的示例: ### 读取Excel文件 python import pandas as pd # 读取Excel文件 df pd.read_excel(pat…...

记录Threadlocal使用

编写ThreadLocal工具类 package com.jjking.jplan.context;public class BaseContext<T> {public static final ThreadLocal threadLocal new ThreadLocal();//存储用户public static void set(Object t) {threadLocal.set(t);}//获取用户public static <T> T ge…...

2024 ccpc 辽宁省赛 E(构造 思维?)L(二分+一点点数论知识?)

E 题意&#xff1a; 可以注意到&#xff1a; 我的两种方格都四个方格的大小。 所以 如果存在一种摆放方式 那么 4|nm。 再考虑一种特殊的情况 22 &#xff0c;此时虽然我的积是4 但是无法摆放的。 1>对于 4 | n,或者 4 | m.我直接摆放第二种方格就可以了。 如果我n 是4 的…...

【iOS】设计模式的六大原则

【iOS】设计模式的六大原则 文章目录 【iOS】设计模式的六大原则前言开闭原则——OCP单一职能原则——SRP里氏替换原则——LSP依赖倒置原则——DLP接口隔离原则——ISP迪米特法则——LoD小结 前言 笔者这段时间看了一下有关于设计模式的七大原则&#xff0c;下面代码示例均为OC…...

网络安全:攻防技术-Google Hacking的实现及应用

前言 google hacking其实并算不上什么新东西&#xff0c;在早几年我在一些国外站点上就看见过相关的介绍&#xff0c;但是由于当时并没有重视这种技术&#xff0c;认为最多就只是用来找找未改名的mdb或者别人留下的webshell什么的&#xff0c;并无太大实际用途。但是前段时间仔…...

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。-多语言

目录 C 语言实现 Python 实现 Java 实现 Js 实现 Ts 实现 题目&#xff1a;输入一行字符&#xff0c;分别统计出其中英文字母、空格、数字和其它字符的个数。 程序分析&#xff1a;利用while语句,条件为输入的字符不为\n。 C 语言实现 #include <stdio.h>int mai…...

2-2-18-9 QNX系统架构之文件系统(三)

阅读前言 本文以QNX系统官方的文档英文原版资料为参考&#xff0c;翻译和逐句校对后&#xff0c;对QNX操作系统的相关概念进行了深度整理&#xff0c;旨在帮助想要了解QNX的读者及开发者可以快速阅读&#xff0c;而不必查看晦涩难懂的英文原文&#xff0c;这些文章将会作为一个…...

各大浏览器(如Chrome、Firefox、Edge、Safari)的对比

浏览器如Chrome、Firefox、Edge等在功能、性能、隐私保护等方面各有特点。以下是对这些浏览器的详细对比&#xff0c;帮助你选择合适的浏览器。 1. Google Chrome 市场份额&#xff1a;Chrome是目前市场上最流行的浏览器&#xff0c;约占全球浏览器市场的65%以上。 性能&#…...

nginx搭建直播推流服务

文章目录 学习链接步骤使用nginx搭建直播推流服务安装依赖库下载nginx-http-flv-module模块下载nginx解压nginx&#xff0c;进入nginx目录设置nginx编译配置编译并安装配置nginx rtmp服务启动nginx 准备另外一台电脑下载OBS下载OBS windows | linux 安装vlc观看直播flv协议hls协…...

单片机-- 松瀚sonix学习过程

硬件&#xff1a;松瀚sn8f5701sg、SN-LINK 3 Adapter模拟器、sn-link转接板 软件&#xff1a; keil-c51&#xff08;v9.60&#xff09;&#xff1a;建立工程&#xff0c;编辑&#xff0c;烧录程序 SN-Link_Driver for Keil C51_V3.00.005&#xff1a;安装sonix设备包和snlin…...

循环神经网络:从基础到应用的深度解析

&#x1f35b;循环神经网络&#xff08;RNN&#xff09;概述 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种能够处理时序数据或序列数据的深度学习模型。不同于传统的前馈神经网络&#xff0c;RNN具有内存单元&#xff0c;能够捕捉序列中前后信息…...

从扩散模型开始的生成模型范式演变--SDE

SDE是在分数生成模型的基础上&#xff0c;将加噪过程扩展时连续、无限状态&#xff0c;使得扩散模型的正向、逆向过程通过SDE表示。在前文讲解DDPM后&#xff0c;本文主要讲解SDE扩散模型原理。本文内容主要来自B站Up主deep_thoughts分享视频Score Diffusion Model分数扩散模型…...

【python使用kazoo连ZooKeeper基础使用】

from kazoo.client import KazooClient, KazooState from kazoo.exceptions import NoNodeError,NodeExistsError,NotEmptyError import json# 创建 KazooClient 实例&#xff0c;连接到 ZooKeeper 服务器 zk KazooClient(hosts127.0.0.1:2181) zk.start()# 定义节点路径 path…...

【设计模式系列】解释器模式(十七)

一、什么是解释器模式 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;它的核心思想是分离实现与解释执行。它用于定义语言的文法规则&#xff0c;并解释执行语言中的表达式。这种模式通常是将每个表达式抽象成一个类&#xff0c;并通…...

只出现一次的数字

只出现一次的数字 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#xff…...

SpringMVC-08-json

8. Json 8.1. 什么是Json JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式&#xff0c;目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写&#xf…...

技术文档的语言表达

技术文档的语言表达 在这个瞬息万变的技术世界中&#xff0c;了解如何撰写有效的技术文档显得尤为重要。无论是开发团队还是最终用户&#xff0c;清晰、简洁且有条理的文档都是连接各方的桥梁。本文将深入探讨技术文档的语言表达&#xff0c;从其重要性、写作原则到各种类型&a…...

深圳网站建设推广平台/黑龙江新闻头条最新消息

数据类型介绍MySQL 数据类型分类整型浮点型字符类型(char与varchar)日期类型枚举与集合具体数据类型见这篇博客MySQL表操作中的约束primary key 主键约束 非空唯一unique key 唯一约束not null 非空约束foreign key 外键约束创建表的的语法CREATE TABLE[IF NOT EXISTS] tbl_nam…...

广州web网站开发培训班/百度用户服务中心人工24小时电话

小信号分析法重点笔记开关电源的反馈环路设计是开关电源设计的一个非常重要的部分&#xff0c;它关系到一个电源性能的好坏。要设计一个好的环路&#xff0c;必须要知道主回路的数学模型&#xff0c;然后根据主回路的数学模型&#xff0c;设计反馈补偿环路。开关电源是一个非线…...

做类似猪八戒网的网站/郑州品牌网站建设

文章目录1.sudo !!2.mtr 命令3.nl 命令4.shulf 和tree 、pstreeshulf 命令tree命令pstree 这个是进程按树形结构显示&#xff0c;显示当前进程以及相关子进程&#xff0c;输出信息跟“tree”类似5.last 命令6.curl ifconfig.me7.lsof -i:端口号8.cut 命令9.seq 命令11.关于 脚本…...

煤矿网站建设/四川疫情最新情况

http://blog.csdn.net/xnby/article/details/50782913 一句话总结&#xff1a;spark是一个基于内存的大数据计算框架&#xff0c; 上层包括了&#xff1a;Spark SQL类似HiveQL&#xff0c; Spark Streaming 实时数据流计算&#xff0c;MLlib 机器学习算法包&#xff0c;GraphX …...

江门企业自助建站系统/18款禁用软件黄app免费

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#includemain(){int n,q,p,m,k1,sum0,s[99999]{2},t[99999];//n是输入的数;q和p分别代表两个数组的工作下标scanf("%d",&n); //k是用来取小于n数的数组工作下标for(int i3;i<n;i2) //去所有小于n的数&…...

博客网站 做淘宝客/百度云引擎搜索

https://blog.csdn.net/hutiewei2008/article/details/101202807         服务器通过笔记本电脑联网...