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.rhkb.cn/news/170847.html

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

相关文章

【软件安装】Windows系统中使用miniserve搭建一个文件服务器

这篇文章&#xff0c;主要介绍如何在Windows系统中使用miniserve搭建一个文件服务器。 目录 一、搭建文件服务器 1.1、下载miniserve 1.2、启动miniserve服务 1.3、指定根目录 1.4、开启访问日志 1.5、指定启动端口 1.6、设置用户认证 1.7、设置界面主题 &#xff08;…

大数据-Storm流式框架(二)--wordcount案例

一、编写wordcount案例 1、新建java项目 2、添加storm的jar包 storm软件包中lib目录下的所有jar包 3、编写java类 WordCountTopology.java package com.bjsxt.storm.wc;import backtype.storm.Config; import backtype.storm.LocalCluster; import backtype.storm.genera…

华为数通方向HCIP-DataCom H12-831题库(多选题:61-80)

第61题 在MPLS VPN中,为了区分使用相同地址空间的IPV4前缀,将IPV4的地址增加了RD值,下列选项描述正确的是: A、在PE设备上,每一个VPN实例都对应一个RD值,同一PE设备上,必须保证RD值唯一 B、RD可用于来控制VPN路由信息的发布 C、RD在传递过程中作为BGP的扩展团体性封装在…

Vuex 动态模块状态管理器

模块化思想 我们之前的博文已经讲述了Vuex怎么使用命名空间实现模块化状态管理。详情可以看&#xff1a; Vuex命名空间及如何获取根模块、兄弟模块状态管理器_AI3D_WebEngineer的博客-CSDN博客https://blog.csdn.net/weixin_42274805/article/details/133269196?ops_request_…

Python-自动化绘制股票价格通道线

常规方案 通过将高点/低点与其 2 个或 3 个相邻点进行比较来检测枢轴点,并检查它是否是其中的最高/最低点。对所有枢轴点进行线性回归以获得上方和下方趋势线。价格离开通道后建仓。通过这样做,我们得到如下所示的价格通道。我认为我们可以利用给定的数据取得更好的结果。

【数据结构】数组和字符串(五):特殊矩阵的压缩存储:稀疏矩阵——压缩稀疏行(CSR)

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表e. 压缩稀疏行&#xff08;Compressed Sparse Row&#xff0c;CSR&#xff09;矩阵结构体创建CSR矩阵元素设置初始化打印矩阵销毁…

22 行为型模式-状态模式

1 状态模式介绍 2 状态模式结构 3 状态模式实现 代码示例 //抽象状态接口 public interface State {//声明抽象方法,不同具体状态类可以有不同实现void handle(Context context); }

Jmeter(十六):jmeter场景的运行架构配置远程负载机详解

jmeter场景的运行架构(本地运行和远程运行) 运行方式&#xff1a; GUI运行&#xff1a;通过图形界面方式运行&#xff0c;该运行方式的可视化界面及监听器动态展示 结果都比较消耗负载机资源&#xff0c;建议大并发时不用&#xff0c;一般进行脚本调试&#xff1b; 命令行运行…

软考系统架构师知识点集锦二:软件工程

一、考情分析 二、考点精讲 2.1 软件过程模型 &#xff08;1&#xff09;原型模型 典型的原型开发方法模型。适用于需求不明确的场景,可以帮助用户明确需求。可以分为[抛弃型原型]与[演化型原型] 原型模型两个阶段: 1、原型开发阶段;2、目标软件开发阶段。 &#x…

世界经济论坛:ChatGPT等生成式AI,对全球23%岗位产生巨大影响

世界经济论坛与全球最大上市咨询公司之一埃森哲合作&#xff0c;联合发布了《未来工作&#xff1a;大语言模型与就业》白皮书。 世界经济论坛表示&#xff0c;随着ChatGPT、Midjourney、Github Copilot等生成式AI的飞速发展&#xff0c;对全球经济和劳动市场产生巨大影响。未来…

SpringBoot整合knife4j

1. 导包 SpringBoot版本&#xff1a;2.3.7.RELEASE <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version></dependency>2. 配置 import com.…

JS加密/解密之那些不为人知的基础逻辑运算符

不多说&#xff0c;直接上干货 使用逻辑非运算符 ! 和双重逻辑非运算符 !!&#xff1a;例如 ![]、!![]、!0、!!0 和 !""、!!""。空字符串的转换&#xff1a;!"" 和 !!""。数组和对象的类型转换&#xff1a;[] []、[] - []、{} [] 和…

【Linux】 rpm安装包保存到本地并批量安装

目录 一、开启rpm安装包缓存到本地仓库 1. 修改yum.conf文件 2. 清理yum缓存 3. yum命令安装软件包 二、如何将rpm安装包保存到指定目录 方法一&#xff1a;yumdownloader 1. 安装yum-utils  2. yumdownloader命令参数说明 3. yumdownloader安装示例 方法二&#xff…

Kafka入门05——基础知识

目录 副本数据同步原理 HW和LEO的更新流程 第一种情况 第二种情况 数据丢失的情况 解决方案 Leader副本的选举过程 日志清除策略和压缩策略 日志清除策略 日志压缩策略 Kafka存储手段 零拷贝&#xff08;Zero-Copy&#xff09; 页缓存&#xff08;Page Cache&…

如何构建一个外卖微信小程序

随着外卖行业的不断发展&#xff0c;越来越多的商家开始关注外卖微信小程序的开发。微信小程序具有使用方便、快速上线、用户覆盖广等优势&#xff0c;成为了商家们的首选。 那么&#xff0c;如何快速开发一个外卖微信小程序呢&#xff1f;下面就让我们来看看吧&#xff01; 首…

Painter:使用视觉提示来引导网络推理

文章目录 1. 论文2. 示意图3. 主要贡献4. 代码简化 1. 论文 paper:Images Speak in Images: A Generalist Painter for In-Context Visual Learning github:https://github.com/baaivision/Painter 2. 示意图 3. 主要贡献 在 In-context Learning 中&#xff0c;作为自然语言…

logback-classic包中ThrowableProxy递归缺陷StackOverflowError解析

logback-classic&#xff08;<1.2.12版本&#xff09;ThrowableProxy类中存在递归缺陷&#xff0c;会导致java.lang.StackOverflowError。改缺陷在1.2.12以上版本(包含该版本)中已修复。 如何复现&#xff1a; 两个异常彼此设置casue&#xff1a; 运行后报以下错误 以上写…

Python OpenCV将n×n的小图拼接成m×m的大图

Python OpenCV将nn的小图拼接成mm的大图 前言前提条件相关介绍实验环境n \times n的小图拼接成m \times m的大图代码实现 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff0c;可点击进入Python日常小操作专栏、OpenCV-Python小…

Spark SQL概述与基本操作

目录 一、Spark SQL概述 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;特点 &#xff08;3&#xff09;Spark SQL与Hive异同 &#xff08;4&#xff09;Spark的数据抽象 二、Spark Session对象执行环境构建 (1)Spark Session对象 &#xff08;2&#xff09;代码演…

视频相关学习笔记

YUV 和rgb一样是一种表示色彩的格式&#xff0c;Y表示亮度&#xff0c;UV表示色度&#xff08;U是蓝色投影&#xff0c;V是红色投影&#xff09;&#xff0c;只有Y就是黑白的&#xff0c;所以这个格式的视频图片可以兼容黑白电视&#xff0c;所以彩色电视使用的都是YUV 存储方…