本文主要快速讲解Kube.NETes的亲和性调度 和 反亲和性调度,通过理论结合实际的方式,让理解更深刻 。
首先来个一句话总结:亲和性调度就像关系亲密的闺蜜,你去哪儿我也去哪儿 。反亲和性调度就像赌气的两个孩子,赌气永远不在一起玩儿 。更多解释和实战详见下文 。花10分钟看到最后,你肯定会有收获 。
![十分钟搞懂K8S的亲和与反亲和调度](http://img.jiangsulong.com/230926/1521596053-0.jpg)
文章插图
一、调度Pod的主要方式Pod调度到指定Node的方式主要有4种:
- nodeName调度:直接在Pod的yaml编排文件中指定nodeName , 调度到指定name的节点上 。
- nodeSelector调度:直接在Pod的yaml编排文件中指定nodeSelector,调度到带有指定label的节点上 。
- 污点(TAInts)和容忍度(Tolerations)调度:详见文章《5分钟搞懂K8S的污点和容忍度(理论+实战)》 。主要通过在Node节点上打污点,然后在Pod的yaml编排文件中配置容忍度 , 来实现调度 。
- 亲和-反亲和调度:见下文讲解 。
为了更灵活更复杂的调度方式 。比如有些场景想把2个Pod 调度到一台节点上,有的场景为了隔离性高可用性想把2个Pod分开到不同节点上,或者有的场景想把Pod调度到指定的一些特点节点上 。
三、亲和调度的前置概念(重要)label在K8S中是非常重要的概念,不管是什么场景 , 只要和选择、筛选相关的 , 基本是用label字段来匹配的 。
亲和性和反亲和性的调度,筛选的条件依旧用的是Node的label字段 。
不管是Node亲和性调度,还是Pod亲和性调度,被调度的主体都是Pod 。都是讲的Pod根据亲和规则调度到某个节点,或者Pod跟随别的Pod调到到某个节点(比如Pod1跟随Pod2,Pod2被调度到B节点,那么Pod1也被调度到B节点) 。
Node亲和性调度 和 Pod亲和性调度 的配置都是写在 编排Pod的yaml里 。因为被调度的主体是Pod 。
Node亲和性调度是指Pod和Node的亲密关系 。
Pod亲和性调度是指Pod和Pod的亲密关系 。
- 硬亲和:亲和规则只有一种,必须符合该规则 。
- 软亲和:规则有多种,每个权重不同,根据权重优先级去选择一个规则 。
![十分钟搞懂K8S的亲和与反亲和调度](http://img.jiangsulong.com/230926/1521594533-1.jpg)
文章插图
四、亲和调度的具体概念Affinity的中文意思是亲近,用来表述亲和性调度再合适不过了 。
亲和性调度:就好像Node(或者Pod)和Pod是关系很好的闺蜜,Pod说,“只要符合这种label的Node(Pod)都是我的好闺蜜,闺蜜在哪儿我就去哪儿” 。
反亲和性调度:就好像2个Pod是赌气的2个孩子,互相对着干,一个往东,另一随便去哪个方向就是不往东,他们不会去到同一个地方 。
1.记住这三种调度关系亲和性调度 和 反亲和性调度的关系就三种:
- node亲和调度:硬亲和、软亲和
- pod亲和调度:硬亲和、软亲和
- pod反亲和调度:硬亲和、软亲和
- RequiredDuringSchedulingIgnoredDuringExecution:是硬亲和的方式,必须满足指定的规则才可以把Pod调度到该Node上 。这里注意Required这个词,中文意思必须的 。
- PreferredDuringSchedulingIgnoredDuringExecution:是软亲和的方式,强调优先满足某个规则 , 然后根据优先的规则,将Pod调度到节点上 。这里注意Preferred这个词,中文意思是首?。?用来说明选择规则的优先级 , 确实比较合适 。
- RequiredDuringScheduling:定义的规则必须强制满足(Required)才会把Pod调度到节点上 。
- IgnoredDuringExecution:已经在节点上运行的Pod不需要满足定义的规则,即使去除节点上的某个标签 , 那些需要节点包含该标签的Pod依旧会在该节点上运行 。或者这么理解:如果Pod所在的节点在Pod运行期间标签被删除了,不再符合该Pod的节点亲和性规则,那也没关系,该Pod 还能继续在该节点上运行 。
推荐阅读
- 一文搞懂基于 OpenTelemetry 进行 Kubernetes 全链路观测
- 放弃亚马逊、谷歌,彻底告别K8s!
- 大白话说明白K8S的PV / PVC / StorageClass
- 惹网友爆笑!TVB知名男星商演唱歌疯狂走音,登台十分钟薪酬17万
- K8s 多集群实践思考和探索
- K8S 入门到实战--部署应用到 K8S
- 鸡蛋羹蒸了十分钟还是稀的 鸡蛋羹蒸了十分钟还是稀的怎么办
- 一文搞懂Redis架构演化之路
- 一文搞懂二叉搜索树、B树、B+树、AVL树、红黑树
- Prometheus on k8s 部署与实战操作进阶篇