k8s之亲和性和反亲和性

一、亲和性和反亲和性

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执行。

相关推荐
奋斗的老史1 天前
25年Docker镜像无法下载的四种对策
docker·容器·eureka
chillxiaohan1 天前
Docker学习记录
学习·docker·容器
柯南二号1 天前
【后端】Docker 常用命令详解
服务器·nginx·docker·容器
新鲜萝卜皮1 天前
容器内运行的进程,在宿主机的top命令中可以显示吗?
容器
平行云1 天前
Paraverse平行云实时云渲染助力第82届威尼斯电影节XR沉浸式体验
unity·云原生·ue5·xr·实时云渲染
叫我阿柒啊1 天前
从全栈开发到云原生:一位Java工程师的实战经验分享
java·spring boot·redis·云原生·kafka·vue·全栈开发
容器魔方1 天前
Karmada v1.15 版本发布!多模板工作负载资源感知能力增强
云原生·容器·云计算
容器魔方1 天前
全栈AI驱动!华为云云容器引擎CCE智能助手焕新升级
云原生·容器·云计算
眠りたいです1 天前
基于脚手架微服务的视频点播系统-界面布局部分(二):用户界面及系统管理界面布局
c++·qt·ui·微服务·云原生·架构·cmake
喂完待续1 天前
【Big Data】云原生与AI时代的存储基石 Apache Ozone 的技术演进路径
云原生·架构·apache·big data·序列晋升