k8s之亲和性和反亲和性

发布于:2025-02-15 ⋅ 阅读:(92) ⋅ 点赞:(0)

一、亲和性和反亲和性

1.概述

        k8s的亲和性(Affinity)是一种用于控制 Pod 调度的机制,它允许你指定 Pod 如何与节点进行互动,以便将 Pod 调度到合适的节点上。

2.类型

  • 节点亲和性 nodeAffinity

        根据用户的设置,选择性的根据节点来部署pod。 

  • pod亲和性 podAffinity

        根据pod的标签和拓扑域来选择性部署pod到节点上。

  • pod反亲和性 podAntiAffinity

        Pod 反亲和性用于将新 Pod 安排到与具有特定标签的现有 Pod 不同的节点上,这有助于实现高可用性和故障隔离。

3.软策略和硬策略

  • 软策略

        preferredDuringSchedulingIgnoredDuringExecution 

        可以根据设置的偏好,尽量的满足设置需求,如果没有节点能够满足偏好设置,依然可以部署。

  • 硬策略

        requiredDuringSchedulingIgnoredDuringExecution

        必须把pod调度到满足偏好设置的节点,如果没有节点满足条件,pod会pending,不会部署到其他节点。

4.键值的运算关系

        根据相应的条件来匹配节点或者是pod的标签

  • In (在)

        选择的标签值要匹配到节点或者是pod。字符串匹配,也可以是数字。

  • NotIn (不在)

        选择的标签值不在节点或者是pod。字符串匹配,也可以是数字。

  • Gt (大于)

        只能比较数字。

  • Lt (小于)

        只能比较数字。

  • Exists (存在)

        只是用来判断标签的key,和value无关。

  • DoesNotExist (不存在)

        只是用来判断不存在标签的key,和value无关。

5.实例

节点亲和性

 kubectl label nodes node01 test1=a #给节点增加标签

pod亲和性

topologyKey 定义节点拓扑关系的字段

topologyKey:test1

test1的标签作为拓扑的关键词

该节点上必须同时满足app=nginx2和标签test1 

pod反亲和性

节点亲和性是非容忍性:如果是硬策略,必须满足条件才可以部署

pod的亲和以及反亲和(容忍性):虽然...但是满足了一定的条件,还是可以继续部署的(硬策略)

node01有app=nginx2,node02没有app=...,node01的标签是test1=a, node02的标签无

反亲和性的策略要求不能app=nginx1,node01满足了一个条件就可以创建pod,node02满足了两个条件既没有app=nginx1又没有标签所以也可以创建pod,反之如果两个条件都不满足,则pod进入pending状态 

二、 污点

1.概述

        污点和节点的亲和性正好相反,节点亲和性是为吸引特定的pod,但是污点是为了排斥pod。 

2.污点类型

  • NoSchedule  

        节点上有此污点的标签,K8s不会把pod调度到这和,但是已部署的pod不受影响。

        一般是设置在主节点上,防止pod部署到主节点(主节点的资源比较小,就是用来控制集群的)。

  • PreferNoSchedule

        尽量避免把pod部署到该节点上,但是也可以部署。

        多主节点的情况下,主节点可以满足部署的情况,为了平衡其他的节点的负载,把matser作为部署的节点,但是优先级相对较低。

  • NoExecute

         不仅会不部署到该节点,而且还会驱逐该节点上已有的pod。

        节点出现故障,节点需要维护,但为了保证业务不中断,于是选择这种方法把pod迁移到其他的节点,保证业务正常运行。

3.命令行

kubectl describe node master01 | grep -i taints    #查看master01上面的污点

kubectl taint node node01 test1=a:PreferNoSchedule   #新增node01上面的污点

kubectl taint node node01 test1=a:PreferNoSchedule-  #删除污点

设置节点的污点只能在命令行完成,不能在yaml执行。

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到