1. 课程导论:Pod资源争抢与租户重调度的背景、目标与课程大纲概览
1.1 为什么需要关注 Pod 资源争抢?
在 Kubernetes 多租户集群中,多个工作负载(Deployment、StatefulSet、DaemonSet)共享同一组物理节点。当多个 Pod 同时竞争 CPU、内存、磁盘 IO 或网络带宽时,会发生资源争抢。这种争抢不仅导致单个 Pod 性能下降,还可能引发级联故障:
- CPU 节流:超出 CPU 限制的 Pod 被内核强制限频,响应延迟飙升。
- OOM Kill:内存使用超过 limits 的 Pod 被 kubelet 杀死,导致 Deployment 副本数不足。
- 磁盘 IO 抢占:日志写入密集的 Pod 拖慢同一节点的数据库 Pod。
- 网络带宽争抢:大数据传输 Pod 挤占在线服务的网络连接。
核心矛盾:Kubernetes 默认调度器只保证 Pod 的 Requests 资源,不保证 Limits 资源。当 Limits 总和超过节点容量时,超卖导致争抢。
1.2 租户重调度的必要性
当资源争抢已经发生,仅靠 QoS 优先级(Guaranteed / Burstable / BestEffort)无法彻底解决问题。需要引入租户重调度机制:
| 场景 | 问题 | 重调度方案 |
|---|---|---|
| 节点 CPU 超卖 > 150% | 所有 Pod 延迟升高 | 驱逐低优 Pod,迁移到空闲节点 |
| 内存碎片化 | 大内存 Pod 无法调度 | 碎片整理 + Pod 重分布 |
| 租户间干扰 | 离线任务影响在线服务 | 拓扑感知调度 + 节点隔离 |
| 节点故障 | Pod 漂移后资源失衡 | Descheduler 重新平衡 |
课程目标:通过本课程,你将掌握如何设计、测试和验证 Deployment 在多租户环境下的资源隔离与重调度策略,确保 SLA 达标。
1.3 课程大纲概览
本课程共 30 章,分为 5 个模块,从原理到实战逐步深入:
| 模块 | 章节范围 | 核心内容 | 实验环境 |
|---|---|---|---|
| 基础篇 | 1-6 | 资源模型、QoS、LimitRange、ResourceQuota | minikube + 3 节点 |
| 争抢模拟篇 | 7-12 | CPU 压力、内存压力、磁盘 IO 争抢、网络带宽争抢 | stress-ng + iperf3 |
| 重调度策略篇 | 13-20 | Descheduler 策略、PodDisruptionBudget、拓扑调度、节点亲和性 | kube-descheduler + 自定义策略 |
| 多租户隔离篇 | 21-26 | Namespace 隔离、租户资源配额、优先级抢占、动态资源调整 | 多租户集群 + VPA |
| 测试与验证篇 | 27-30 | 混沌工程、SLA 监控、故障注入、自动化测试框架 | chaos-mesh + Prometheus |
前置要求:你需要具备 Kubernetes 基础操作能力(kubectl、Deployment、Service),了解 Pod 生命周期和调度基本概念。建议准备一个至少 3 个工作节点的集群用于实验。
1.4 关键术语与概念
在进入后续章节前,先统一以下核心术语:
| 术语 | 定义 | 本课程中的角色 |
|---|---|---|
| Requests | Pod 保证能获得的最小资源量 | 调度决策依据 |
| Limits | Pod 允许使用的最大资源量 | 超卖与争抢的根源 |
| QoS Class | Guaranteed / Burstable / BestEffort | 驱逐优先级 |
| Descheduler | Kubernetes 官方重调度组件 | 核心测试对象 |
| PodDisruptionBudget | 保证最小可用 Pod 数的策略 | 重调度保护机制 |
| Chaos Mesh | 云原生混沌工程平台 | 故障注入工具 |
学习建议:每章结束后,请完成对应的实验操作。本课程的所有测试用例均可在 minikube 或 kind 集群上复现,建议使用
kubectl get pods -o wide 实时观察 Pod 分布变化。