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

相关推荐
MiniFlyZt30 分钟前
Spring Cloud Gateway:构建高效微服务网关的利器
微服务·云原生·架构
仇辉攻防4 小时前
【云安全】云原生- K8S API Server 未授权访问
web安全·docker·云原生·容器·kubernetes·k8s·安全威胁分析
仇辉攻防4 小时前
【云安全】云原生- K8S kubeconfig 文件泄露
web安全·docker·云原生·容器·kubernetes·k8s·安全威胁分析
小刘爱喇石( ˝ᗢ̈˝ )4 小时前
重生之我要当云原生大师(十四)分析和存储日志
云原生
转身後 默落6 小时前
01.Docker 概述
运维·docker·容器
drebander7 小时前
Docker 镜像详解:构建、管理与优化
运维·docker·容器
handsomestWei11 小时前
k8s优雅操作pod容器组
运维·云原生·k8s·pod
Karoku06611 小时前
【k8s应用管理】kubernetes 存储管理
运维·docker·云原生·容器·kubernetes
淡黄的Cherry12 小时前
Spring Cloud + Nacos + K8S 零影响发布方案
spring cloud·容器·kubernetes