k8s-----24、亲和力Affinity
1、应用场景
pod和节点间的关系:
- 某些Pod优先选择有ssd=true标签的节点,如果没有在考虑部署到其它节点;
- 某些Pod需要部署在ssd=true和type=physical的节点上,但是优先部署在ssd=true的节点上;
pod和pod间的关系:
- 同一个应用的Pod不同的副本或者同一个项目的应用尽量或必须不部署在同一个节点或者符合某个标签的一类节点上或者不同的区域; #反亲和
- 相互依赖的两个Pod尽量或必须部署在同一个节点上或者同一个域内。 #亲和
2、分类
Affinity亲和力:
- NodeAffinity:节点亲和力/反亲和力
- PodAffinity:Pod 亲和力
- PodAntiAffinity:Pod反亲和力
3、可用率保障形态
通过亲和性和反亲和性可以部署到不同的宿主机、机房或者机柜,保证应用与服务的可用性。
4、亲和力配置
4.1 节点亲和力
#核心参数解释
1、requiredDuringSchedulingIgnoredDuringExecution:硬亲和力配置nodeSelectorTerms:节点选择器配置,可以配置多个matchExpressions(满足其一),每个
matchExpressions下可以配置多个key、value类型的选择器(都需要满足),其中values可以配置多个
(满足其一)2、preferredDuringSchedulingIgnoredDuringExecution:软亲和力配置weight:软亲和力的权重,权重越高优先级越大,范围1-100preference:软亲和力配置项,和weight同级,可以配置多个,matchExpressions和硬亲和力一致 operator:标签匹配的方式In:相当于key = value的形式NotIn:相当于key != value的形式Exists:节点存在label的key为指定的值即可,不能配置values字段DoesNotExist:节点不存在label的key为指定的值即可,不能配置values字段 Gt:大于value指定的值Lt:小于value指定的值
#示例
apiVersion: v1
kind: Pod
metadata:name: with-node-affinity
spec:affinity: nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/e2e-az-name operator: Invalues:- e2e-az1- az-2 preferredDuringSchedulingIgnoredDuringExecution: - weight: 1preference: matchExpressions:- key: another-node-label-keyoperator: Invalues:- another-node-label-valuecontainers:- name: with-node-affinity
4.2 pod亲和力
#核心参数,注意区分是节点还是Pod。
labelSelector:Pod选择器配置,可以配置多个
matchExpressions:和节点亲和力配置一致
operator:配置和节点亲和力一致,但是没有Gt和Lt
topologyKey:匹配的拓扑域的key,也就是节点上label的key,key和value相同的为同一个域,可以用于标注不同的机房和地区
Namespaces: 和哪个命名空间的Pod进行匹配,为空为当前命名空间
apiVersion: v1
kind: Pod
metadata:name: with-pod-affinity
spec:affinity: podAffinity:requiredDuringSchedulingIgnoredDuringExecution: - labelSelector:matchExpressions: - key: securityoperator: In values:- S1topologyKey: failure-domain.beta.kubernetes.io/zone podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution: - weight: 100podAffinityTerm: labelSelector: #只能写一个,重复需要重新划分权重。matchExpressions: - key: securityoperator: In values:- S2namespaces:- defaulttopologyKey: failure-domain.beta.kubernetes.io/zonecontainers:- name: with-pod-affinityimage: nginx
5、示例
5.1 同一个应用分布到不同的节点
#反亲和力示例
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: must-be-diff-nodesname: must-be-diff-nodesnamespace: kube-public
spec:replicas: 1 #只有一台机器,所以使用一个副本数selector:matchLabels:app: must-be-diff-nodestemplate: metadata:labels:app: must-be-diff-nodesspec: affinity:podAntiAffinity: #反亲和星requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: app #pod的label选择器为must-be-diff-nodesoperator: Invalues:- must-be-diff-nodestopologyKey: kubernetes.io/hostname #拓扑域使用的主机名,只要主机名相同,就是一个相同的域containers:- image: nginximagePullPolicy: IfNotPresent name: must-be-diff-nodeskubectl create -f antiaffinity.yaml #应用yaml文件
kubectl get po -nkube-public -owide #查看Pod详细信息,发现NODE节点是所在的主机名
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
must-be-diff-nodes-7bdb5cfc9f-lqbjv 1/1 Running 0 53s 10.244.96.137 zhy <none> <none>
kubectl scale deployment must-be-diff-nodes -n kube-public --replicas=2 #扩副本数后,如果没有合适的机器,会发现po处于penning状态kubectl get po -nkube-public -owide #查看扩容后的状态
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
must-be-diff-nodes-7bdb5cfc9f-4dn96 0/1 Pending 0 3s <none> <none> <none> <none>
must-be-diff-nodes-7bdb5cfc9f-lqbjv 1/1 Running 0 94s 10.244.96.137 zhy <none> <none>##describe的详细信息如下
6、拓扑域TopologyKey
6.1 简介
topologyKey:拓扑域,主要针对宿主机,相当于对宿主机进行区域的划分。用label进行判断,不同的key和不同的value是属于不同的拓扑域.
kubectl get nodes zhy --show-labels #可以查看不同节点的label信息
6.2 示例
#我这里只有一台机器,所以只打一个region标签
[root@zhy ~/k8s/affinity]# kubectl label nodes zhy region=zhy
node/zhy labeled
[root@zhy ~/k8s/affinity]# kubectl get nodes zhy --show-labels | grep region region=zhy#配置deploy的yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: must-be-diff-zonename: must-be-diff-zonenamespace: kube-public
spec:replicas: 2 #这里副本数为2 selector:matchLabels:app: must-be-diff-zonetemplate: metadata:labels:app: must-be-diff-zonespec: affinity:podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions: - key: appoperator: In values:- must-be-diff-zonetopologyKey: region #添加region的域,创建pod会判断两个Pod是不是属于同一个域,如果属于,则不会创建到一起,如果没有合适的节点,pod会处于pending状态containers:- image: nginx imagePullPolicy: IfNotPresent name: must-be-diff-zone
#创建pod
kubectl create -f topolog.yaml
kubectl get pod -nkube-public #查看发现处于pending状态
NAME READY STATUS RESTARTS AGE
must-be-diff-zone-99744d496-lf87d 1/1 Running 0 10s
must-be-diff-zone-99744d496-wppk2 0/1 Pending 0 10s
#查看pod错误信息
kubectl describe pod -nkube-public must-be-diff-zone-99744d496-wppk2
相关文章:

k8s-----24、亲和力Affinity
1、应用场景 pod和节点间的关系: 某些Pod优先选择有ssdtrue标签的节点,如果没有在考虑部署到其它节点;某些Pod需要部署在ssdtrue和typephysical的节点上,但是优先部署在ssdtrue的节点上; pod和pod间的关系: 同一个应用的Pod不…...
860. 柠檬水找零
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,…...

Flink将数据写入MySQL(JDBC)
一、写在前面 在实际的生产环境中,我们经常会把Flink处理的数据写入MySQL、Doris等数据库中,下面以MySQL为例,使用JDBC的方式将Flink的数据实时数据写入MySQL。 二、代码示例 2.1 版本说明 <flink.version>1.14.6</flink.version…...

react-typescript-demo
1.使用 Context 来存储数据...
Alexon:在云原生环境中快速部署应用服务
Alexon是一个旨在快速部署WEB应用服务到分布式系统中的工具,适用于云原生环境。 Alexon由SymeCloud Limited(syme.dev) 发布,使用GNU Guile编写而成,支持函数编程概念。 SymeCloud 公司主要致力于 AI-Infra 方面的研发,从 OpenAI …...

5G技术在职业教育领域的应用:产生巨变的技术
5G技术在职业教育领域的应用:产生巨变的技术 职业教育领域正面临着前所未有的挑战和机遇。随着5G技术的快速发展和普及,其高速度、低延迟、大容量和连接数的特性给职业教育带来了革命性的改变。本文将深入探讨5G技术在职业教育领域的应用场景、技术原理和…...

【触想智能】工控一体机与5G物联网技术结合是未来发展趋势
工控一体机也叫工业电脑一体机,是工业应用非常重要的一种产品。目前,工控一体机在工业领域的应用已经非常普及,在繁忙的生产车间、数字化机床、自助服务终端设备等场景中,我们都有看到它的身影。 工控一体机应用的普及已经潜移默化…...
LuatOS-SOC接口文档(air780E)--lvgl - LVGL图像库
lvgl.draw_mask_radius_param_t() 创建一个lv_draw_mask_radius_param_t 参数 无 返回值 返回值类型 解释 userdata lv_draw_mask_radius_param_t指针 例子 local radius lvgl.draw_mask_radius_param_t()lvgl.draw_mask_radius_param_t_free(radius) 释放一个lv_d…...
LuatOS-SOC接口文档(air780E)--lora2 - lora2驱动模块(支持多挂)
常量 常量 类型 解释 lora2.SLEEP number SLEEP模式 lora2.STANDBY number STANDBY模式 lora2.init(ic, loraconfig,spiconfig) lora初始化 参数 传入值类型 解释 string lora 型号,当前支持: llcc68 sx1268 table lora配置参数,与具体…...
WKWebView iOS17设置UserAgent
WKWebView 设置 user-agent 参考文档 之前设置 user-agent 都是通过设置NSUserDefaults来实现的,不过升级到了iOS17之后这个方式不好用了。 老的设置方式: [[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];目前看通过设置 we…...
持续集成部署-k8s-服务发现-Service
持续集成部署-k8s-服务发现-Service:配置讲解及基础命令 1. Service 简介2. 基础命令3. 基于 Service 访问外部服务4. 代理外部域名5. Endpoints 常用类型1. Service 简介 在K8s中,Service 是一种可以暴露一个或多个Pod的稳定的网络终点,从而形成逻辑上的应用服务单元,为服…...

RocksDB基本架构与原理详解
Rocksdb Flink提供基于流的有状态计算,除了提供实时数据流的处理能力,还需要将计算产生的状态存储起来。 为了满足状态存取需求,提供了memory、flie system、rocksdb三种类型的状态存储机制。 memory存取高效单空间有限,且可用…...

ArcGIS笔记12_ArcGIS搜索工具没法用?ArcGIS运行很慢很卡?
本文目录 前言Step 1 ArcGIS搜索工具没法用Step 2 ArcGIS运行很慢很卡 前言 这是笔者最近遇到的两个小问题,新换了台式机,安装上ArcGIS后发现搜索工具没法用,而且感觉还不如原来笔记本运行的流畅,加载图层很慢,编辑要…...
【VictoriaMetrics】单机版配置
为方便查看,释义都已翻译成中文,本文配置基于VictoriaMetrics 1.87.1版本 bigMergeConcurrencyint用于大合并的最大 CPU 核数。设置为 0 时使用默认值cacheExpireDuration30m0s...

【C语言】strcpy()函数
🦄个人主页:修修修也 🎏所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.strcpy()函数简介 1.函数功能 2.函数参数 1>.char * destination 2>.const char * source 3.函数返回值 4.函数头文件 二.strcpy()函数的具体使用 1.使用s…...

C++基础算法⑦——信奥一本通递归算法(放苹果、求最大公约数问题、2的幂次方表示、分数求和、因子分解、判断元素是否存在)
递归算法 1206:放苹果1207:求最大公约数问题1208:2的幂次方表示1209:分数求和1210:因子分解1211:判断元素是否存在 1206:放苹果 这道题还是有些难度的,我们要考虑几种放苹果的情况。…...

uni-app医院智能导诊系统源码
随着科技的迅速发展,人工智能已经逐渐渗透到我们生活的各个领域。在医疗行业中,智能导诊系统成为了一个备受关注的应用。本文将详细介绍智能导诊系统的概念、技术原理以及在医疗领域中的应用,分析其优势和未来发展趋势。 智能导诊系统通过人工…...
启动jar时指定nacos配置
背景 由于需要在不同服务上部署应用,避免频繁打包,需要在jar启动时灵活配置naocs配置 启动命令 java -Xms256m -Xmx512m -Dfile.encodingutf-8 -jar mes-gateway-1.0.1.jar --spring.cloud.nacos.discovery.server-addrhttp://127.0.0.1:8848 --spri…...

linux安装vscode vscode使用 创建项目并运行
下载 https://code.visualstudio.com/ 下载.deb文件 安装 假如文件被下载到了 /opt目录下 进入Opt目录,右键从当前目录打开终端。 输入下面的安装命令。 sudo apt-get install ./code_1.83.1-1696982868_amd64.deb 安装成功。 安装插件 使用c,必…...

如何解决数据倾斜
星光下的赶路人star的个人主页 臣书刷字墨淋漓,舒卷烟云势最奇 文章目录 1、数据倾斜的现象2、解决办法2.1 单表聚合(group bysum())2.2 多表关联(join) 3、倾斜原因 1、数据倾斜的现象 部分Reduce一直运行࿰…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...