22-k8s中pod的调度-亲和性affinity
一·、概述
在k8s当中,“亲和性”分为三种,节点亲和性、pod亲和性、pod反亲和性;
| 亲和性分类 | 名称 | 解释说明 |
| nodeAffinity | 节点亲和性 | 通过【节点】标签匹配,用于控制pod调度到哪些node节点上,以及不能调度到哪些node节点上;(主角node节点) |
| podAffinity | pod亲和性 | 通过【节点+pod】标签匹配,可以和哪些pod部署在同一个节点上(拓扑域);(主角是pod) |
| podAntiAffinity | pod反亲和性 | 通过【节点+pod】标签匹配,与pod亲和性相反,就是和那些pod不在一个节点上(拓扑域); |
二、nodeAffinity-节点亲和性
1,给k8s节点创建标签
[root@k8s231 ~]# kubectl label nodes k8s231 k8s=xinjizhiwa-01
node/k8s231 labeled
[root@k8s231 ~]# kubectl label nodes k8s232 k8s=xinjizhiwa-02
node/k8s232 labeled
[root@k8s231 ~]# kubectl label nodes k8s233 k8s=xinjizhiwa-03
node/k8s233 labeled
查看标签
[root@k8s231 dns]# kubectl get nodes --show-labels

2,编辑资源清单设置节点亲和性
[root@k8s231 nodeaffinity]# cat nodeaffinity.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: dm-affinity
spec:
replicas: 20
selector:
matchLabels:
k8s: xinjizhiwa
template:
metadata:
name: pod-affinity
labels:
k8s: xinjizhiwa
spec:
#声明亲和性
affinity:
#声明亲和性类型
nodeAffinity:
#硬限制,必须满足的条件有哪些?(不满足下面的条件,亲和性就设置失败)
requiredDuringSchedulingIgnoredDuringExecution:
#设置节点选择器列表:
nodeSelectorTerms:
#声明基于节点的标签进行关联
- matchExpressions:
- key: k8s
values:
- xinjizhiwa-03
- xinjizhiwa-02
#设置key和value的关系;
#--In:key==value(必须写value)
#--NotIn:key !=value(必须写value)
operator: In
#软限制,不一定满足,但会优先满足,相当于一高了调度的优先级;
preferredDuringSchedulingIgnoredDuringExecution:
#配置权重
- weight: 10
#偏向性
preference:
#基于节点的标签进行关联
matchExpressions:
#节点的标签名称
- key: k8s
values:
- xinjizhiwa-03
#关联关系,表示key和values的关系
#In:表示包含关系(value必须写)
#NotIn:表示不包含(value必须写)
#Exists: 表示存在关系(不能写value)
#DoesNotExist:不存在(不能写value)
#Gt:大于(value必须是一个单一的元素,且值将被解释称一个整数)
#Lt:小于(value必须是一个单一的元素,且值将被解释称一个整数)
operator: In
containers:
- name: c1
image: nginx:1.20.1-alpine
ports:
- containerPort: 80
3,创建资源
[root@k8s231 nodeaffinity]# kubectl apply -f nodeaffinity.yaml
4,查看pod所在节点,验证亲和性


三、podAffinity-pod的亲和性

基于“节点标签”进行设置,第一个pod副本创建在了哪个节点上,那么其余副本也会创建在这个节点上;
拓扑域:节点机器的标签的key和value都相等的机器,就是同一个拓扑域;
1,编辑资源清单设置pod亲和性
[root@k8s231 nodeaffinity]# cat podaffinity.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: dm-affinity
spec:
replicas: 20
selector:
matchLabels:
k8s: xinjizhiwa
template:
metadata:
name: pod-affinity
labels:
k8s: xinjizhiwa
spec:
#声明亲和性
affinity:
#声明亲和性类型
podAffinity:
#硬限制,必须满足的条件有哪些?(不满足下面的条件,亲和性就设置失败)
requiredDuringSchedulingIgnoredDuringExecution:
#设置拓扑域,指定【节点的标签名】
#【节点key】就是说,设置了拓扑域,pod就会往这个标签的节点进行创建#只要满足key是k8s的节点的标签,那么就是同一个拓扑域
- topologyKey: k8s
#【pod标签】确定pod的标签,用于二次确认,选中了拓扑域(节点标签的key),再次选中pod标签才能确认调度到哪个节点;
labelSelector:
matchExpressions:#意思是说,只要key的值是k8s的pod创建在了哪个节点,“我”就跟随他。也创建在这个节点上;
- key: k8s
#如果pod标签,出现了key值相同,value值不同的情况下,就不见设置Exists存在的关系了
#建议设置:In的方式进行匹配,当然此时Value就不能设置了;
operator: Exists
containers:
- name: c1
image: nginx:1.20.1-alpine
ports:
- containerPort: 80
2,创建资源
[root@k8s231 nodeaffinity]# kubectl apply -f podaffinity.yaml
3,查看pod所在节点
[root@k8s231 nodeaffinity]# kubectl get pods -o wide

四、podAntAffinity-pod的反亲和性
pod的亲和性:符合拓扑域的范围,指定标签的pod创建在哪里,其他pod就创建在哪里;
pod的反亲和性:与之相反,符合拓扑域的范围,指定标签的pod创建在哪里,其他pod就不能创建在哪里;
1,编辑资源清单设置pod的反亲和性
[root@k8s231 nodeaffinity]# cat podantaffinity.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: dm-affinity
spec:
replicas: 4
selector:
matchLabels:
k8s: xinjizhiwa
template:
metadata:
name: pod-affinity
labels:
k8s: xinjizhiwa
spec:
#声明亲和性
affinity:
#声明亲和性类型
podAntiAffinity:
#硬限制,必须满足的条件有哪些?(不满足下面的条件,亲和性就设置失败)
requiredDuringSchedulingIgnoredDuringExecution:
#设置拓扑域,指定【节点的标签名】
#【节点key】就是说,设置了拓扑域,pod就会往这个标签的节点进行创建
- topologyKey: k8s
#【pod标签】确定pod的标签,用于二次确认,选中了拓扑域(节点标签的key),再次选中pod标签才能确认调度到哪个节点;
labelSelector:
matchExpressions:
- key: k8s
#如果pod标签,出现了key值相同,value值不同的情况下,就不见设置Exists存在的关系了
#建议设置:In的方式进行匹配,当然此时Value就不能设置了;
operator: Exists
containers:
- name: c1
image: nginx:1.20.1-alpine
ports:
- containerPort: 80
2,创建资源
[root@k8s231 nodeaffinity]# kubectl apply -f podantaffinity.yaml
3,查看pod

结论:
1,由于第一pod创建在了k8s232中,所以第二个pod就无法再k8s232中创建;
2,第二个pod就再k8s233中创建了;
3,由于我们是4个副本,k8s231还设置了污点,无法创建pod;
4,所以,我们4个副本,最后只能创建成功2个,剩下两个pending;
至此,亲和性,学习完毕
相关文章:
22-k8s中pod的调度-亲和性affinity
一、概述 在k8s当中,“亲和性”分为三种,节点亲和性、pod亲和性、pod反亲和性; 亲和性分类名称解释说明nodeAffinity节点亲和性通过【节点】标签匹配,用于控制pod调度到哪些node节点上,以及不能调度到哪些node节点上&…...
通俗易懂,Spring Bean生命周期管理的理解
目录 1、实例化阶段 2、初始化阶段 3、销毁阶段 总结 在Spring框架中,Bean是最基本的组件,它是Spring框架中的一个Java对象。 下面通过Bean来理解bean的生命周期: Bean(initMethod "customInit", destroyMethod "cust…...
找座位 - 华为OD统一考试(C卷)
OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。 现在给出一排观众座位分布图,座位中存在已落座的观众,请计算出,在不移动现有观众座位…...
npm run dev运行出现NODE_OPTIONS=--max_old_space_size=4096 vite --mode dev --host?
问题描述 PS E:\AWorkDataease\DataEase\core\core-frontend> npm run dev dataease0.0.0 dev NODE_OPTIONS–max_old_space_size4096 vite --mode dev --host 0.0.0.0 ‘NODE_OPTIONS’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 解决方案 遇到…...
钠离子电池技术
一、什么是钠离子电池 1、发展背景 在现有电池技术中,锂离子电池(LIB)具有无与伦比的能量密度和多功能性。自其首次商业化以来,便携式设备一直在推动其高速增长。近年,电动汽车和固定式储能应用开始兴起。由于锂离子…...
第三十六天| 435. 无重叠区间、763.划分字母区间、56. 合并区间
Leetcode 435. 无重叠区间 题目链接:435 无重叠区间 题干:给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 思考:贪心法。和452 用最少数量的…...
React setState同步还是异步
React18 setState是同步还是异步?_react18 同步-CSDN博客 React18之前或者React18使用了ReactDOM.render,setState在React调度流程中是异步更新,在原生事件和setTimeout中是同步更新。React18使用ReactDOM.createRoot,那么默认都是…...
Docker安装和使用Redis
Docker安装和使用Redis 一、拉取 Redis 镜像二、根据镜像运行容器三、配置 Redis 密码1、进入 redis 容器内部2、使用 redis 命令行设置密码 一、拉取 Redis 镜像 docker pull redis二、根据镜像运行容器 docker run \ --name redis \-p 6379:6379 \-d \redis \redis-server …...
四分位距IQR_ interquartile range
四分位距IQR_ interquartile range 1 IQR(Interquartile Range)四分位距的含义2 如何计算IQR参考: 1 IQR(Interquartile Range)四分位距的含义 官方定义: 四分位距(interquartile range, IQR&a…...
Vision Transformer - VIT
文章目录 1. Embedding层2. Encoder层3. MLP Head层4. Hybrid混合模型 论文:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 网址:https://arxiv.org/abs/2010.11929 Hybrid - 传统CNN和Transformer混合模型 模型架构 输…...
HTTP与HTTPS:网络安全之门户
源码分享 https://docs.qq.com/sheet/DUHNQdlRUVUp5Vll2?tabBB08J2 在进行网页爬取和数据收集时,我们经常会与HTTP(超文本传输协议)和HTTPS(安全的超文本传输协议)打交道。这两种协议都用于互联网上的数据传…...
头歌:共享单车之数据分析
第1关 统计共享单车每天的平均使用时间 package com.educoder.bigData.sharedbicycle;import java.io.IOException; import java.text.ParseException; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Locale; import java…...
MySQL的数据类型和细节
1.整型 数值类型字节描述TINYINT[UNSIGNED]1很小的整数,默认有符号 [-128,127]/[0,255]SMALLINT[UNSIGNED]2较小的整数,默认有符号 [-32768,32767]/[0,65535]MEDIUMINT[UNSIGNED]3中等的整数,默认有符号 [-8388608,8388607]/[0,16777215]…...
自建AWS S3存储服务
unsetunset前言unsetunset AWS S3(Amazon S3,全名为亚马逊简易存储服务),是亚马逊公司利用其亚马逊网络服务系统所提供的网络在线存储服务。我常用的很多SaaS服务中提供的文件存储功能,底层也都是AWS S3,比…...
『论文阅读|研究用于视障人士户外障碍物检测的 YOLO 模型』
研究用于视障人士户外障碍物检测的 YOLO 模型 摘要1 引言2 相关工作2.1 障碍物检测的相关工作2.2 物体检测和其他基于CNN的模型 3 问题的提出4 方法4.1 YOLO4.2 YOLOv54.3 YOLOv64.4 YOLOv74.5 YOLOv84.6 YOLO-NAS 5 实验和结果5.1 数据集和预处理5.2 训练和实现细节5.3 性能指…...
LeetCode--1445. 苹果和桔子
文章目录 1 题目描述2 测试用例3 解题思路 1 题目描述 表: Sales ------------------------ | Column Name | Type | ------------------------ | sale_date | date | | fruit | enum | | sold_num | int | ------------------------(sale…...
Java基础知识
一、标识符规范 标识符必须以字母(汉字)、下划线、美元符号开头,其他部分可以是字母、下划线、美元符号,数字的任意组合。谨记不能以数字开头。java使用unicode字符集,汉字也可以用该字符集表示。因此汉字也可以用作变量名。 关键字不能用作…...
并发编程-Synchronized
什么是Synchronized synchronized是Java提供的一个关键字,Synchronized可以保证并发程序的原子性,可见性,有序性。 我们会把synchronized称为重量级锁。主要原因,是因为JDK1.6之前,synchronized是一个重量级锁相比于J…...
C语言——从头开始——深入理解指针(1)
一.内存和地址 我们知道计算上CPU(中央处理器)在处理数据的时候,是通过地址总线把需要的数据从内存中读取的,后通过数据总线把处理后的数据放回内存中。如下图所示: 计算机把内存划分为⼀个个的内存单元,每…...
微信小程序-绑定数据并在后台获取它
如图 遍历列表的过程中需要绑定数据,点击时候需要绑定数据 这里是源代码 <block wx:for"{{productList}}" wx:key"productId"><view class"product-item" bindtap"handleProductClick" data-product-id"{{i…...
Jimeng LoRA动态热切换实战:避免显存爆炸,轻松测试多训练阶段模型
Jimeng LoRA动态热切换实战:避免显存爆炸,轻松测试多训练阶段模型 1. 项目背景与核心价值 你是否遇到过这样的困扰:在测试不同训练阶段的LoRA模型时,每次切换版本都需要重新加载底座模型,不仅耗时耗力,还…...
SaaS Boilerplate认证系统详解:用户注册、OAuth登录和双重验证完整实现
SaaS Boilerplate认证系统详解:用户注册、OAuth登录和双重验证完整实现 【免费下载链接】saas-boilerplate SaaS Boilerplate - Open Source and free SaaS stack that lets you build SaaS products faster in React, Django and AWS. Focus on essential business…...
OpenPAI存储管理完全手册:支持NFS、SMB等多种存储方案
OpenPAI存储管理完全手册:支持NFS、SMB等多种存储方案 【免费下载链接】pai Resource scheduling and cluster management for AI 项目地址: https://gitcode.com/gh_mirrors/pa/pai OpenPAI作为开源AI平台,提供了完整的存储管理解决方案…...
WAN2.2文生视频镜像部署案例:私有云K8s集群中弹性扩缩容视频生成服务
WAN2.2文生视频镜像部署案例:私有云K8s集群中弹性扩缩容视频生成服务 1. 引言:当视频创作遇上弹性算力 想象一下,你的团队需要为新产品发布制作一批宣传视频。传统的流程是:策划写脚本、设计师画分镜、剪辑师合成渲染࿰…...
幻境·流金惊艳生成:从织梦令到流金光影汇聚的全过程效果对比
幻境流金惊艳生成:从织梦令到流金光影汇聚的全过程效果对比 1. 开篇:当技术遇见艺术的美妙邂逅 想象一下,你脑海中浮现出一个绝美的画面:赛博朋克都市中霓虹流淌的街道,或是水墨意境中的玄金山水。传统方式需要数小时…...
免费域名会不会对网站SEO造成影响_免费域名对网站性能和访问速度有影响吗
免费域名会不会对网站SEO造成影响 在互联网时代,网站的建设和推广是每个企业和个人都必须面对的挑战。其中,域名作为网站的身份和地址,对于网站的SEO(搜索引擎优化)有着重要影响。而免费域名的出现,给许多…...
告别抓包失败!保姆级配置:让Burp+Proxifier稳定抓取任意微信小程序
微信小程序抓包实战:BurpProxifier零失败配置指南 每次调试微信小程序接口都像在玩捉迷藏?明明按照教程一步步操作,却总在最后一步功亏一篑。作为经历过数十次抓包失败的过来人,我总结出一套"一次配置终身受用"的解决方…...
SDS011传感器驱动开发:嵌入式PM2.5/PM10检测实战指南
1. SDS011传感器库技术解析:嵌入式系统中的PM2.5/PM10颗粒物检测实践指南1.1 项目定位与工程价值SDS011是由中国Nova Fitness公司推出的低成本、高可靠性激光散射式颗粒物传感器,专为环境空气质量监测设计。该传感器可同时输出PM2.5和PM10质量浓度数据&a…...
GAPSO-LSTM:遗传粒子群优化算法优化LSTM超参数的数据回归预测方法
GAPSO-LSTM,即遗传粒子群优化算法优化LSTM的超参数做数据回归预测,多输入单输出,预测精度高于PSO-LSTM,算法原理为串行GAPSO,PSO的寻优结果再引入高斯变异和个体杂交,可以解决PSO容易陷入局部最优的问题。一…...
17.在 React 中如何根据条件决定渲染哪个组件?
在 React 里,组件不是一上来就“全给你渲染出来”的。 很多时候,我们希望:界面要看情况说话——登录了看“欢迎回来”没登录就看“请先登录”加载中只给你个转圈圈请求失败再丢个错误提示这些“根据条件,决定渲染什么”的行为&…...
