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

相关推荐
不想画图11 小时前
Kubernetes(三)——组网概念和基础操作指令
云原生·容器·kubernetes
weixin_4624462314 小时前
K8s 集群部署基础:Linux 三节点 SSH 互信(免密登录)配置指南
linux·kubernetes·ssh
Fortune_yangyang15 小时前
Kubernetes 操作管理
云原生·容器·kubernetes
AllFiles16 小时前
Kubernetes PVC 扩容全流程实战:从原理到操作详解
后端·kubernetes
放寒假脚后跟v17 小时前
Pod 的 YAML 文件中 exitCode 字段的具体含义、不同取值代表的场景
运维·云原生·容器·kubernetes·k8s
东方佑17 小时前
使用Docker Compose一键部署OnlyOffice:完整指南与配置解析
运维·docker·容器
原神启动117 小时前
K8S(五)—— YAML文件解析
java·容器·kubernetes
lin张18 小时前
k8s(二)项目生命周期管理、发布策略与声明式资源管理
云原生·容器·kubernetes
一只鱼丸yo18 小时前
Service Mesh:微服务治理的下一代方案
微服务·云原生·service_mesh
赵文宇(温玉)18 小时前
Docker的价值、特点、创新与关键技术
运维·docker·容器