ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

K8s GPU 节点反亲和性与拓扑分布约束调度实战

K8s GPU 节点反亲和性与拓扑分布约束调度实战 K8s GPU 节点反亲和性与拓扑分布约束调度实战在云原生 KubernetesK8s跨多个可用区Multi-Availability Zones, Multi-AZ运营超高可用大语言模型LLM推理集群时默认的 K8s 调度器常常产生严重的**“鸡蛋放在同一个篮子里”的调度聚集缺陷**灾难场景复现生产集群申请了 8 个 vLLM 推理 Pod 副本默认调度器由于某个 GPU 物理机节点Node拥有较多空闲显卡直接把全部 8 个 Pod 副本集中调度到了同一台物理服务器、或者同一个可用区AZ-A的同一个机架上当该台物理机发生突发电源烧毁、或 AZ-A 机房发生光纤挖断事故时该大模型推理服务的全部 8 个 Pod 瞬间全部物理死亡引发严重的 100% 全网服务瘫痪事故高可用架构名存实亡。利用 Kubernetes 的Pod 间反亲和性Pod Anti-Affinity与拓扑分布约束Topology Spread Constraints:topology.kubernetes.io/zonekubernetes.io/hostname声明式强制调度器将 Pod 副本均匀离散地打散Evenly Distributed到不同的跨可用区机房与不同的独立物理服务器上并配置maxSkew: 1严格限制各机房副本倾斜差额实现即使单个可用区整体断网全网业务依然保留 66%~80% 算力健康平稳运行一、默认聚集单点崩溃 vs 拓扑分布约束跨可用区打散全景对比┌────────────────────────────────────────────────────────┐ │ ❌ 默认粗放调度 (8 个 Pod 全部堆死在同一个 AZ-A 机房): │ │ [可用区 A (机房断电 )] ──► 8 个 Pod 全部瞬间死亡! │ │ [可用区 B (健康空闲)] ──► 0 个 Pod (算力荒废) │ │ 灾难: 单个可用区机房故障导致全网 AI 业务 100% 瘫痪! │ └────────────────────────────────────────────────────────┘ VS ┌────────────────────────────────────────────────────────┐ │ ✅ 拓扑分布约束 (Topology Spread - 强制跨机房均匀打散):│ │ ├── 可用区 AZ-A (机房 1): 调度 4 个 Pod (不同物理机) │ │ └── 可用区 AZ-B (机房 2): 调度 4 个 Pod (不同物理机) │ │ 收益: 即使 AZ-A 彻底断电AZ-B 依然秒级承载全网流量! │ └────────────────────────────────────────────────────────┘二、生产级 K8s 跨可用区与跨主机拓扑分布约束声明配置vllm-topology-spread.yamlapiVersion: apps/v1 kind: Deployment metadata: name: vllm-ha-cluster-deployment namespace: ai-production spec: replicas: 8 # 8 个推理副本 selector: matchLabels: app: vllm-ha-inference template: metadata: labels: app: vllm-ha-inference spec: # 1. 核心跨机房与跨主机拓扑分布约束 topologySpreadConstraints: # 约束 A: 强制将 Pod 跨不同的物理可用区 (Zone) 均匀打散 - maxSkew: 1 # 任意两个可用区之间的 Pod 副本数量差额绝对不能超过 1 个 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule # 硬性强约束不满足绝不妥协调度 labelSelector: matchLabels: app: vllm-ha-inference # 约束 B: 强制将 Pod 跨不同的物理宿主机 (Hostname) 打散 (严禁单机聚集!) - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: ScheduleAnyway # 软约束兜底 labelSelector: matchLabels: app: vllm-ha-inference # 2. 节点亲和性与 GPU 污点容忍 nodeSelector: node.kubernetes.io/instance-type: gpu.a100.80gb tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule containers: - name: vllm-engine image: vllm/vllm-openai:v0.6.0 resources: limits: nvidia.com/gpu: 1 memory: 32Gi requests: nvidia.com/gpu: 1 memory: 16Gi三、生产治理收益通过在 Kubernetes 中全面推行 GPU 拓扑分布约束与反亲和调度AI 生产推理集群在面对单机房断网、单服务器硬件烧毁等极端灾难时的存活率达到 100%全集群 GPU Pod 的跨可用区分布倾斜度Skew严格锁定在 1 以内极致均匀平衡赋予了企业云原生 AI 基础设施满足最高金融级多活容灾标准的高可用调度硬实力。
返回列表