高级调度 —— 亲和力(Affinity)
1.K8S基础2.搭建 Kubernetes 集群 —— 搭建方案 kubeadm3.搭建 Kubernetes 集群 —— 命令行工具 kubectl4.搭建 Kubernetes 集群 —— API 概述5.深入Pod —— 配置文件6.深入Pod —— 探针7.深入Pod —— 生命周期 及 PreStop事件的应用8.资源调度 —— Label 和 Selector:标签和选择器9.资源调度 —— Deployment(针对部署的无状态应用)10.资源调度 —— StatefulSet(针对部署的有状态应用)11.资源调度 —— DaemonSet:守护进程应用场景(Fluent日志收集程序)12.资源调度 —— HPA:Pod基于负载指标自动水平扩容 / 缩容13.服务发现 —— Service(主要用于服务内的网络共享)14.服务发现 —— Ingress(用于外部服务的发现和统一入口)15.配置与存储 —— 配置管理16.配置与存储 —— 持久化存储17.高级调度 —— CronJob计划任务、初始化容器 InitContainer18.高级调度 —— 污点、容忍
19.高级调度 —— 亲和力(Affinity)
20.身份认证与权限21.Helm 包管理器- 污点:尽可能远离它,比如内存小
- 亲和力:尽可能靠近它,比如它是SSD
一、NodeAffinity
节点亲和力:进行 pod 调度时,优先调度到符合条件的亲和力节点上
一)RequiredDuringSchedulingIgnoredDuringExecution
硬亲和力,即支持必须部署在指定的节点上,也支持必须不部署在指定的节点上
二)PreferredDuringSchedulingIgnoredDuringExecution
软亲和力:尽量部署在满足条件的节点上,或尽量不要部署在被匹配的节点上
三)应用
1、匹配类型
- In
部署在满足条件的节点上 - NotIn
匹配不在条件中的节点,实现节点反亲和性 - Exists
只要存在 key 名字就可以,不关心值是什么 - DoesNotExist
匹配指定 key 名不存在的节点,实现节点反亲和性 - Gt
value 为数值,且节点上的值小于指定的条件 - Lt
value 为数值,且节点上的值大于指定条件
2、配置模板
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity: # 亲和力配置
nodeAffinity: # 节点亲和力
requiredDuringSchedulingIgnoredDuringExecution: # 节点必须匹配下方配置
nodeSelectorTerms: # 选择器
- matchExpressions: # 匹配表达式
- key: topology.kubernetes.io/zone # 匹配 label 的 key
operator: In # 匹配方式,只要匹配成功下方的一个 value 即可
values:
- antarctica-east1 # 匹配的 value
- antarctica-west1 # 匹配的 value
preferredDuringSchedulingIgnoredDuringExecution: # 节点尽量匹配下方配置
- weight: 1 # 权重[1,100],按照匹配规则对所有节点累加权重,最终之和会加入优先级评分,优先级越高被调度的可能性越高
preference:
matchExpressions: # 匹配表达式
- key: another-node-label-key # label 的 key
operator: In # 匹配方式,满足一个即可
values:
- another-node-label-value # 匹配的 value
# - weight: 20
......
containers:
- name: with-node-affinity
image: pause:2.0
二、PodAffinity
Pod 亲和力:将与指定 pod 亲和力相匹配的 pod 部署在同一节点。
一)RequiredDuringSchedulingIgnoredDuringExecution
必须将应用部署在一块
二)PreferredDuringSchedulingIgnoredDuringExecution
尽量将应用部署在一块
三)配置模板
apiVersion: v1
kind: Pod
metadata:
name: with-pod-affinity
spec:
affinity: # 亲和力配置
podAffinity: # pod 亲和力配置
requiredDuringSchedulingIgnoredDuringExecution: # 当前 pod 必须匹配到对应条件 pod 所在的 node 上
- labelSelector: # 标签选择器
matchExpressions: # 匹配表达式
- key: security # 匹配的 key
operator: In # 匹配方式
values: # 匹配其中的一个 value
- S1
topologyKey: topology.kubernetes.io/zone
podAntiAffinity: # pod 反亲和力配置
preferredDuringSchedulingIgnoredDuringExecution: # 尽量不要将当前节点部署到匹配下列参数的 pod 所在的 node 上
- weight: 100 # 权重
podAffinityTerm: # pod 亲和力配置条件
labelSelector: # 标签选择器
matchExpressions: # 匹配表达式
- key: security # 匹配的 key
operator: In # 匹配的方式
values:
- S2 # 匹配的 value
topologyKey: topology.kubernetes.io/zone
containers:
- name: with-pod-affinity
image: pause:2.0
均为打标签进行匹配
kubectl label no k8s-node1 kubernetes.io/os=linux
三、PodAntiAffinity
Pod 反亲和力:根据策略尽量部署或不部署到一块
一)RequiredDuringSchedulingIgnoredDuringExecution
不要将应用与之匹配的部署到一块
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S1
topologyKey: topology.kubernetes.io/zone
二)PreferredDuringSchedulingIgnoredDuringExecution
尽量不要将应用部署到一块
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)