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 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wt库的C++下载器程序

以下是一个使用Wt库的C下载器程序&#xff0c;用于下载音频文件。此程序使用了的代码。 #include <Wt/Wt.h> #include <Wt/Http/DiskCache.h> #include <Wt/Http/HttpClient.h> ​ // 定义一个函数来获取服务器 static std::string get_proxy() {// 使用Wt:…

idea免费插件分享

分享一些在开发中常用到的idea插件&#xff0c;都是一些我自己常用的&#xff0c;希望对各位程序员有帮助吧。 1、Chinese Language 汉化插件&#xff1a;中文语言包将为您的 IntelliJ IDEA, AppCode, CLion, DataGrip, GoLand, PyCharm, PhpStorm, RubyMine, WebStorm, 和Rid…

js创建 ajax 过程

目录 前言&#xff1a;AJAX 技术的重要性 详解&#xff1a;创建 AJAX 请求的步骤 1. 创建 XMLHttpRequest 对象 2. 配置请求 3. 处理响应 4. 发送请求 5. 处理异步请求 解析&#xff1a;AJAX 请求的重要性和限制 总结&#xff1a; 前言&#xff1a;AJAX 技术的重要性 …

漏洞复现--用友 畅捷通T+ .net反序列化RCE

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

javaEE -8(9000字详解网络编程)

一&#xff1a;网络编程基础 1.1 网络资源 所谓的网络资源&#xff0c;其实就是在网络中可以获取的各种数据资源&#xff0c;而所有的网络资源&#xff0c;都是通过网络编程来进行数据传输的。 用户在浏览器中&#xff0c;打开在线视频网站&#xff0c;如优酷看视频&#xff…

【jvm】虚拟机栈之操作数栈

目录 一、说明二、图解2.1 代码示例2.2 javap操作 三、图示3.1 bipush 153.2 istore_13.3 bipush 83.4 istore_23.5 iload_13.6 iload_23.7 iadd3.8 istore_33.9 return结束 四、附加 一、说明 1.Operand Stack 2.栈可以使用数组或链表来实现 3.每一个独立的栈帧包含一个后进先…

arcgis js api 4.x通过TileLayer类加载arcgis server10.2发布的切片服务跨域问题的解决办法

1.错误复现 2.解决办法 2.1去https://github.com/Esri/resource-proxy 网站下载代理配置文件&#xff0c;我下载的是最新的1.1.2版本&#xff0c;这里根据后台服务器配置情况不同有三种配置文件&#xff0c;此次我用到的是DotNet和Java. 2.2 DotNet配置 2.2.1 对proxy文件增加…

相交链表-力扣

一、题目描述 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 二、题解 注意题目所说的相交&#xff0c;相交节点不只是数值上的相等&#xff0c;而是相交以后两条链变成一条链。 解决改题目&#xff0c;我们可以&#xff1a;…

景联文科技提供4D-BEV标注工具:提升自动驾驶感知能力的精准数据支持

4D-BEV标注是一种用于自动驾驶领域的数据标注方法。在3D空间的基础上&#xff0c;加入了时间维度&#xff0c;形成了四个维度。这种方法通过精准地跟踪和记录动态对象&#xff08;如车辆、行人&#xff09;的运动轨迹、姿势变化以及速度等信息&#xff0c;全面理解和分析动态对…

Java中JVM、JRE和JDK三者有什么区别和联系?

任何语言或者软件的运行都需要环境。就像人要生活在空气中&#xff0c;鱼要活在水中&#xff0c;喜阴植物就不能放在阳光下暴晒一样&#xff0c;任何对象个体的存在都离不开其所需要的环境&#xff0c;编程语言亦是一样的。 java 语言的开发运行&#xff0c;也离不开 Java 语言…

crossover23.6闪亮登场发布啦,2023最新功能解析

CrossOver刚刚更新了23.6版本&#xff0c;新增了多款游戏的支持&#xff0c;快来看看你想玩的游戏在不在里面吧。点击这里立即下载最新版CrossOver。 软件介绍 CrossOver 23.6 让Mac可以运行Windows程序的工具 已通过小编安装运行测试 100%可以使用。 CrossOver for Mac 23.…

OKLink携手CertiK在港举办Web3生态安全主题论坛

2023年10月23日&#xff0c;OKLink与CertiK共同发起的Web3生态安全主题论坛在香港铜锣湾拉开帷幕。本次论坛由OKLink和CertiK主办&#xff0c;香港投资推广署独家支持&#xff0c;聚焦如何构建安全可靠的Web3生态系统议题&#xff0c;同时深入剖析这一进程中所面临的潜在挑战。…

企事业单位/公司电脑文件透明加密保护 | 防泄密软件\系统!

推荐——「天锐绿盾电脑文件防泄密系统」 一款全面的企业/公司数据透明加密防泄密系统&#xff0c;旨在从源头上保障数据的安全和使用安全。 PC访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 它具有以下特点&#xff1a…

第6周 .NET

好嘛&#xff01;本来以为上周SQL Server环境配置等已经够恶心了&#xff0c;没想到这周又得去搞所谓的Microsoft Visual Studio 2005了。 首先非常离谱的是&#xff0c;这个Microsoft Visual Studio 2005如果就是指Visual Studio 2005&#xff0c;那么已经是8年前的老的不行的…

TensorFlow图像多标签分类实例

接下来&#xff0c;我们将从零开始讲解一个基于TensorFlow的图像多标签分类实例&#xff0c;这里以图片验证码为例进行讲解。 在我们访问某个网站的时候&#xff0c;经常会遇到图片验证码。图片验证码的主要目的是区分爬虫程序和人类&#xff0c;并将爬虫程序阻挡在外。 下面…

Python超入门(6)__迅速上手操作掌握Python

# 26.函数和参数 # 注意&#xff1a;有参函数和无参函数的名字要不同 def user(): # 无参函数print("hello world!")def user1(my_id): # 有参函数print(my_id)def user2(first_name, last_name): # 有参函数print(fMy name is {first_name} {last_name})print(&…

【机器学习】迁移学习(Transfer)详解!

1. 什么是迁移学习 迁移学习(Transfer Learning)是一种机器学习方法&#xff0c;就是把为任务 A 开发的模型作为初始点&#xff0c;重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务&#xff0c;虽然大多数机器学习算法都是…

微信小程序云开发笔记-初始化商城小程序

缘起&#xff1a;由于痴迷机器人&#xff0c;店都快倒闭了&#xff0c;没办法&#xff0c;拿出点精力搞一下店里的小程序&#xff0c;要多卖货才能活下来搞机器人&#xff0c;在此记录一下搞小程序的过程&#xff0c;要不然搞完又忘了。腾讯的云开发&#xff0c;前端和后端都有…

Linux阻塞IO(高级字符设备二)

阻塞IO属于同步 IO&#xff0c;阻塞IO在Linux内核中是非常常用的 IO 模型&#xff0c;所依赖的机制是等待队列。 一、等待队列介绍 在 Linux 驱动程序中&#xff0c;阻塞进程可以使用等待队列来实现。等待队列是内核实现阻塞和唤醒的内核机制&#xff0c;以双循环链表为基础结…

C笔记:引用调用,通过指针传递

代码 #include<stdio.h> int max1(int num1,int num2) {if(num1 < num2){num1 num2;}else{num2 num1;} } int max2(int *num1,int *num2) {if(num1 < num2){*num1 *num2; // 把 num2 赋值给 num1 }else{*num2 *num1;} } int main() {int num1 0,num2 -2;int…