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

news2024/11/24 17:45:25

一·、概述

        在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.coloradmin.cn/o/1457442.html

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

相关文章

MySQL学习记录——십이 事务

文章目录 1、了解事务2、事务提交3、事务隔离级别1、隔离性和隔离级别2、查看、设置隔离级别3、读未提交4、读提交5、可重复读6、串行化7、总结 4、事务一致性5、事务隔离性1、隐藏字段2、undo日志3、模拟MVCC4、Read View 6、读提交RC、可重复读RR的区别 1、了解事务 MySQL内…

【C语言必刷题】3.二分查找

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有…

成功靠运气还是能力?我写了一个运气模拟器,告诉给你答案

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~ 视频版可直接访问:https://www.bilibili.com/video/BV1ct421b7Q7/?vd_source391a8dc379e0da60c77490e3221f097a…

oauthlib,一个强大的 Python 身份校验库!

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 ​编辑 前言 什么是 OAuthLib? 安装 OAuthLib OAuthLib 的主要功能 OAuthLib 的用法 实现…

自己动手写编译器:使用 PDA 实现增强和属性语法的解析

在前面章节中我们了解了增强语法和属性语法,特别是看到了这两种语法的结合体,本节我们看看如何使用前面我们说过的自顶向下自动机来实现这两种语法结合体的解析,这里使用的方法也是成熟编译器常用的一种语法解析算法。 首先我们先给出上一节…

区块链金融科技:技术融合与挑战应对【文末送书-16】

文章目录 前言一.区块链与金融科技的融合:革新金融格局的技术之光1.1区块链技术简介1.2 区块链在金融科技中的应用 二.智能合约2.1 去中心化金融(DeFi)2.2区块链对金融科技的影响2.3数据安全性 三.区块链与金融科技【文末送书-16】3.1 粉丝福…

如何训练Ai把古诗《如梦令》描写的意境画出来?

常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。 古诗《如梦令》以其优美的语言和丰富的意境给人留下深刻的印象。今天,我们将借助AI的力量,将这首诗的意境转化为视觉画面…

x86使用页表实现虚拟内存原理分析---使用代码分析

分页机制 这一部分在手册第四章 视频讲解可以看这一个课程 在不使用分页机制的时候, 我们看到的是物理内存, 物理内存有多大, 我们就可以使用多大的内存 使用内存分页机制, 我们就可以扩充访问的地址范围, 也可以实现权限的细分, 实际上就是实现虚拟内存, 将地址进行映射, 看到…

希尔排序算法

目录 ShellSort希尔排序 整体思路 图解分析 【1】预排序 单组排序 多组并排 【2】直接插入排序 关于gap取值 总代码实现 时间复杂度 ShellSort希尔排序 希尔排序法又称缩小增量法。 希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有…

产品经理学习-产品运营《流程管理》

如何进行流程管理 信息可视化 甘特图-流程管理思维导图-方案讨论原型图-活动文档 明确责任制 分工明确,关键环境有主负责人通过时间倒推督促管理 沟通技巧 明确共同利益以结果激励做好信息同步 如何进行监控活动效果 监控活动的效果是要监控数据 活动每个环境的…

MySQL学习记录——십일 索引

文章目录 1、了解索引2、聚簇、非聚簇索引3、操作1、主键索引2、唯一键索引3、普通索引4、注意事项 4、全文索引 1、了解索引 MySQL服务器是在内存中的,所有数据库的CURD操作都是在内存中进行,索引也是如此。索引是用来提高性能的,它通过组织…

[嵌入式系统-16]:RT-Thread -2- 主要功能功能组件详解与API函数说明、API参考手册入口

目录 一、RT-Thread主要功能组件 二、内核组件 2.1 概述 2.2 API 三、设备驱动 3.1 概述 3.2 API 四、通信组件 4.1 概述 4.4 API 五、网络组件 5.1 概述 5.2 API 5.3 补充:MQTT协议 六、文件系统 6.1 概述 6.2 API 七、GUI 组件 7.1 概述 7.2 …

进程终止与进程等待

fork 函数 fork 函数是 Linux 中一个非常重要的函数&#xff0c;它的作用是从已存在的进程中创建一个新进程。这个新进程就是当前进程的子进程。 fork() 函数使用方法&#xff1a;它在头文件 #include <unistd.h> 中&#xff0c;函数原型为 pid_t fork(void); 用一个…

CMNet:Contrastive Magnification Network for Micro-Expression Recognition 阅读笔记

AAAI 2023的一篇文章&#xff0c;东南大学几位老师的工作&#xff0c;用于做微表情识别中的运动增强工作&#xff0c; 以下是阅读时记录的笔记。 摘要&#xff1a; However,existing magnification strategies tend to use the features offacial images that include not onl…

Minio通过Url直接访问附件

1、修改桶策略为public 2、http://locahost:9000/桶名/文件名即可 访问该文件&#xff0c;自己浏览 http://127.0.0.1:9000/netcore/netcore/9d4a526b-a477-46a3-90c7-a668354e3b46.png

C语言每日一题(59)左叶子之和

题目链接 力扣网404 左叶子之和 题目描述 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&#xff0c;所以返回 2…

【C++航海王:追寻罗杰的编程之路】vector

目录 1 -> vector的介绍及使用 1.1 -> vector的介绍 1.2 -> vector的使用 1.2.1 -> vector的介绍 1.2.2 -> vector iterator的使用 1.2.3 -> vector空间增长问题 1.2.4 -> vector的增删查改 1.2.5 -> vector迭代器失效问题 2 -> vector的深…

K8s进阶之路-控制器无状态服务:

RC/RS/Deployment 控制器 deployment无状态&#xff08;最常用&#xff09;&#xff1a; nginx和Apache statefulset有状态&#xff1a; mysql和redis damonset初始化 job一次性任务 cronjob任务计划 1无状态&#xff1a;不会对本地环境产生依赖如&#xff1a;nginx和Apache …

Docker详解及使用

文章目录 为什么要用docker为什么会出现容器Docker 是什么容器是什么虚拟化是什么Docker 和 虚拟化的区别Docker 容器有几种在状态什么是仓库什么是镜像什么是容器仓库、镜像、容器的关系常用的 Docker 命令如何把主机的东西拷贝到容器内部如何让容器随着 Docker 服务启动而自动…

八、右侧下部页面内容区域

内容区可直接放置router-view占位子路由展示位置 所有内容区路由是layout的子路由&#xff0c;子路由需要在父路由中使用router-view占位才能显示app.vue是所有其他组件的父view/router&#xff0c;router里的父子关系通过来展现。所以在app.vue也要router-view标签 也可拆成组…