22-k8s中pod的调度-亲和性affinity

一·、概述

        在k8s当中,“亲和性”分为三种,节点亲和性、pod亲和性、pod反亲和性;

亲和性分类名称解释说明
nodeAffinity节点亲和性通过【节点】标签匹配,用于控制pod调度到哪些node节点上,以及不能调度到哪些node节点上;(主角node节点)
podAffinitypod亲和性通过【节点+pod】标签匹配,可以和哪些pod部署在同一个节点上(拓扑域);(主角是pod)
podAntiAffinitypod反亲和性通过【节点+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;

至此,亲和性,学习完毕

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

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

相关文章

Linux-ls命令

目录 ls:查看目录下文件/文件夹 ls -l:列表显示文件 ls -a:显示所有文件正常情况下‘ . ’开头的文件是隐藏的 ls -la:以列表形式显示所有文件包括隐藏文件 ls -lt:按时间倒序查看文件 ls -R:递归方式…

【git 使用】超级好用的 git reset 和 git revert 功能对比和使用方法

首先你要知道 git 区分暂存区和工作区,如果你用过 sourcetree 你就会知道 git reset 超级好用 git reset 命令用于将当前分支的 HEAD 指针移动到指定的提交,并且可以选择性地修改工作区和暂存区的状态。git reset 命令有几种常用的用法,主要…

突破百度地图Web API的配额限制,实现接口调用自由!

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 引言 好久没用百度地图开放平台,最近发现平台调整了接口调用的策略,增加了实名认证,…

STM32 USART详细解读(理论知识)

文章目录 前言一、同步传输和异步传输二、UART协议三、UART硬件结构1.波特率,数据位,校验位,停止位设置2.数据发送流程3.数据接收流程4.中断控制 总结 前言 本篇文章来给大家讲解一下STM32中的USART,USART是STM32中非常重要的一个…

QT多线程应用及代码示例

一.多线程的原理和功能 1.多线程(multithreading)是指从软件或者硬件上实现多个线程并发执行的技术。 2.多线程的功能和作用主要包括: 提高程序的并发性和效率:多线程可以同时执行多个任务,不同的线程可以同时读写不…

腾讯云助力酒店IT系统上云,实现出海业务的双重优势

潮起潮涌,随着时代浪潮的翻涌,生活处处可见是巨大的变化,衣食住行都有了更多更大的需求,出门旅游观赏当地风景品尝特色美食的前提是要住好,只有休息好了才有更多的精力去游玩。酒店系统的升级上云让登记变得更加便捷&a…

【机器学习笔记】13 降维

降维概述 维数灾难 维数灾难(Curse of Dimensionality):通常是指在涉及到向量的计算的问题中,随着维数的增加,计算量呈指数倍增长的一种现象。在很多机器学习问题中,训练集中的每条数据经常伴随着上千、甚至上万个特征。要处理这…

【Linux】git操作 - gitee

1.使用 git 命令行 安装 git yum install git 2.使用gitee 注册账户 工作台 - Gitee.com 进入gitee,根据提示注册并登录 新建仓库 仓库名称仓库简介初始换仓库 3.Linux-git操作 进入仓库,选择“克隆/下载” 复制下面的两行命令进行git配置 然后将仓库clo…

教师专业发展的五个阶段

每当人们谈论教师,总会联想到“传道授业解惑”的崇高形象。但教师的专业成长,绝非一蹴而就。今天,就让我们一起探秘教师专业发展的五个阶段,看看一位普通教师是如何历练成为教育行家的。 阶段一:新手摸索期 初入教育行…

走进科学系列之遭遇鬼打墙的OUTLOOK

网管小贾 / sysadm.cc 正值春运,车站里熙熙攘攘、人头攒动。 鲍勃和约瑟夫正在候车室,等待检票。 “嗨!约瑟夫!快来看看,我的电脑出问题了!” “得了吧,马上就要检票上车了,你就不…

调用接口时不时出现 Error: socket hang up

项目场景: 提示:这里简述项目相关背景: 今天采用golang创建了一个http服务,准备对若干接口进行测试。 问题描述 提示:这里描述项目中遇到的问题: 在测试第一个接口时,发现采用postman调用接口…

Ansible yum模块 主要用于软件安装

目录 选项 实例 安装一个tree实例卸载一个 tree 选项 name   #所安装的包的名称 state  #present—>安装, latest—>安装最新的, absent—> 卸载软件。 update_cache  #强制更新yum的缓存 conf_file  #指定远程yum安装时所依赖的配置文件&…

5G车载路由器引领无人驾驶车联网应用

随着无人驾驶技术的不断发展,车联网正逐渐成为实现智能交通的重要组成部分。5G车载路由器将在车联网的应用中起到至关重要的作用,它能够满足无人驾驶应用的低时延、高速率和实时控制等需求,进一步推动无人驾驶车联网技术。 5G路由器具备低时延…

从 AGP 4.1.2 到 7.5.1——XmlParser、GPathResult、QName 过时

新年首发, 去年的问题,今年解决~ 问题 & 排查 1: Task failed with an exception. ----------- * What went wrong: Execution failed for task :app:processCommonReleaseManifest. > org.xml.sax.SAXParseException; lineNumber: 1; columnNu…

【申请体验Sora】OpenAI Red Teaming Network application

网址:https://openai.com/form/red-teaming-network 使用Gmail , 国家选美国 两个问题: Why are you interested in joining the OpenAI Red Teaming Network? I’m eager to experience the powerful allure of Sora, which I believe wi…

postgresql 文件结构(一) 数据库、表对应的文件

1、问题 甲方要求提供数据库数据量大小,由于各个业务数据库共用一个postgres,因此想把每个数据库占用的空间都统计一下。 2、查找物理存储文件目录 如下图所示,可以查询表、库的物理存储文件名称 -- 查询表对应的文件 select oid,relname…

leetcode 01背包问题

典型的01背包问题可以暴力求解,直接将所有可能全部遍历然后挑选符合条件的即可,但这样时间复杂度过高,有2的n次方。 所以我们在这里采用动态规划的方式来做,并且,我们可以采用二维数组或者一维数组来做。 二维数组&a…

供水管网管道爆管事故发生原因及控制措施

经济的快速发展及城镇化的不断推进使得我国的城镇数量及规模都在不断地扩大。供水系统是城镇基础设施中 的重要的一环。现今在我国各城市中已经建立了相对完善的城市供水管网体系。但是在供水管网运行过程中爆管问题时 有发生,从而对城市用水的正常供应以及民众的正…

Redis 缓存(Cache)

什么是缓存 缓存(cache)是计算机中的一个经典的概念在很多场景中都会涉及到。 核心思路就是把一些常用的数据放到触手可及(访问速度更快)的地方,方便随时读取。 这里所说的“触手可及”是个相对的概念 我们知道,对于硬件的访问速度来说,通常…

vue3实现瀑布流布局组件

先看效果图 直接上代码 utils.js // 用于模拟接口请求 export const getRemoteData (data 获取数据, time 2000) > {return new Promise((resolve) > {setTimeout(() > {console.log(模拟获取接口数据, data)resolve(data)}, time)}) }// 获取数组随机项 export…