当前位置: 首页 > 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;这些文章将会作为一个…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...