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

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和节点间的关系&#xff1a; 某些Pod优先选择有ssdtrue标签的节点&#xff0c;如果没有在考虑部署到其它节点;某些Pod需要部署在ssdtrue和typephysical的节点上&#xff0c;但是优先部署在ssdtrue的节点上; pod和pod间的关系&#xff1a; 同一个应用的Pod不…...

860. 柠檬水找零

在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品&#xff0c;&#xff08;按账单 bills 支付的顺序&#xff09;一次购买一杯。 每位顾客只买一杯柠檬水&#xff0c;然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零&#xff0c;…...

Flink将数据写入MySQL(JDBC)

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

react-typescript-demo

1.使用 Context 来存储数据...

Alexon:在云原生环境中快速部署应用服务

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

5G技术在职业教育领域的应用:产生巨变的技术

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

【触想智能】工控一体机与5G物联网技术结合是未来发展趋势

工控一体机也叫工业电脑一体机&#xff0c;是工业应用非常重要的一种产品。目前&#xff0c;工控一体机在工业领域的应用已经非常普及&#xff0c;在繁忙的生产车间、数字化机床、自助服务终端设备等场景中&#xff0c;我们都有看到它的身影。 工控一体机应用的普及已经潜移默化…...

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 型号&#xff0c;当前支持&#xff1a; llcc68 sx1268 table lora配置参数,与具体…...

WKWebView iOS17设置UserAgent

WKWebView 设置 user-agent 参考文档 之前设置 user-agent 都是通过设置NSUserDefaults来实现的&#xff0c;不过升级到了iOS17之后这个方式不好用了。 老的设置方式&#xff1a; [[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提供基于流的有状态计算&#xff0c;除了提供实时数据流的处理能力&#xff0c;还需要将计算产生的状态存储起来。 为了满足状态存取需求&#xff0c;提供了memory、flie system、rocksdb三种类型的状态存储机制。 memory存取高效单空间有限&#xff0c;且可用…...

ArcGIS笔记12_ArcGIS搜索工具没法用?ArcGIS运行很慢很卡?

本文目录 前言Step 1 ArcGIS搜索工具没法用Step 2 ArcGIS运行很慢很卡 前言 这是笔者最近遇到的两个小问题&#xff0c;新换了台式机&#xff0c;安装上ArcGIS后发现搜索工具没法用&#xff0c;而且感觉还不如原来笔记本运行的流畅&#xff0c;加载图层很慢&#xff0c;编辑要…...

【VictoriaMetrics】单机版配置

为方便查看,释义都已翻译成中文,本文配置基于VictoriaMetrics 1.87.1版本 bigMergeConcurrencyint用于大合并的最大 CPU 核数。设置为 0 时使用默认值cacheExpireDuration30m0s...

【C语言】strcpy()函数

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

C++基础算法⑦——信奥一本通递归算法(放苹果、求最大公约数问题、2的幂次方表示、分数求和、因子分解、判断元素是否存在)

递归算法 1206&#xff1a;放苹果1207&#xff1a;求最大公约数问题1208&#xff1a;2的幂次方表示1209&#xff1a;分数求和1210&#xff1a;因子分解1211&#xff1a;判断元素是否存在 1206&#xff1a;放苹果 这道题还是有些难度的&#xff0c;我们要考虑几种放苹果的情况。…...

uni-app医院智能导诊系统源码

随着科技的迅速发展&#xff0c;人工智能已经逐渐渗透到我们生活的各个领域。在医疗行业中&#xff0c;智能导诊系统成为了一个备受关注的应用。本文将详细介绍智能导诊系统的概念、技术原理以及在医疗领域中的应用&#xff0c;分析其优势和未来发展趋势。 智能导诊系统通过人工…...

启动jar时指定nacos配置

背景 由于需要在不同服务上部署应用&#xff0c;避免频繁打包&#xff0c;需要在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目录&#xff0c;右键从当前目录打开终端。 输入下面的安装命令。 sudo apt-get install ./code_1.83.1-1696982868_amd64.deb 安装成功。 安装插件 使用c&#xff0c;必…...

如何解决数据倾斜

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

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...