2. 核心概念:Deployment、ReplicaSet、Pod、Node、Cluster Autoscaler、Horizontal Pod Autoscaler (HPA) 基础
在进行水位评估与容量规划之前,必须统一团队对 Kubernetes 核心调度单元与弹性组件的认知。本章将逐一拆解从最细粒度的 Pod 到集群级 Cluster Autoscaler 的职责边界、生命周期与水位含义,为后续的指标采集与阈值设计奠定基础。
2.1 核心对象层级关系
下图展示了从应用负载到基础设施的完整控制链路。理解这一层级是水位评估的前提:每一层的“水位”含义不同,但最终都会向上或向下传导。
2.2 各核心概念详解
2.2.1 Pod
Pod 是 Kubernetes 中最小的部署和调度单元,包含一个或多个共享网络栈、存储卷的容器。在水位评估中,Pod 是 CPU、内存、网络 I/O 等资源消耗的直接载体。
- 资源请求(Requests):调度时保证的最小资源量,直接影响 Node 能否容纳该 Pod。
- 资源限制(Limits):Pod 可使用的资源上限,超出后可能被 OOM Kill 或 CPU 节流。
- 水位含义:Pod 级水位 = 实际使用量 / Requests,是 HPA 和调度决策的原始输入。
2.2.2 ReplicaSet
ReplicaSet 确保指定数量的 Pod 副本始终运行。它通过标签选择器匹配 Pod,并在 Pod 异常退出时自动创建替代 Pod。
- 水位含义:ReplicaSet 的水位体现为
readyReplicas / replicas,即就绪副本比例。当该比例持续低于 1,说明集群资源不足或应用启动失败。 - 与 Deployment 的关系:Deployment 管理 ReplicaSet 的版本更新,但水位评估通常直接观察 ReplicaSet 的副本状态。
2.2.3 Deployment
Deployment 声明式地管理 Pod 和 ReplicaSet,支持滚动更新、回滚、扩缩容。它是服务目录平台中最常见的 workload 类型。
- 水位含义:Deployment 的水位 = 期望副本数 vs 实际可用副本数。当
availableReplicas < desiredReplicas时,说明存在资源瓶颈或调度失败。 - 更新策略:
maxSurge和maxUnavailable控制滚动过程中的资源占用,直接影响水位波动的幅度。
status.conditions 字段中的 Available 和 Progressing 条件是判断水位是否健康的关键信号。
2.2.4 Node
Node 是集群中的工作节点(虚拟机或物理机),提供 CPU、内存、磁盘、网络等资源。Node 的水位是集群容量规划的核心。
| 资源维度 | 关键指标 | 水位阈值参考 |
|---|---|---|
| CPU | node_cpu_utilization | 请求量 ≤ 80% 总容量;实际使用 ≤ 85% |
| 内存 | node_memory_utilization | 请求量 ≤ 80% 总容量;实际使用 ≤ 85% |
| Pod 密度 | kubelet_running_pods | ≤ 节点最大 Pod 数的 90% |
| 磁盘 | node_filesystem_usage | ≤ 80% |
2.2.5 Horizontal Pod Autoscaler (HPA)
HPA 根据 CPU、内存或自定义指标自动调整 Deployment/ReplicaSet 的副本数。它是工作负载级弹性的核心控制器。
- 工作原理:HPA 定期查询指标(默认 15s),计算
期望副本数 = ceil(当前副本数 × (当前指标值 / 目标指标值))。 - 水位含义:HPA 的水位 = 当前副本数 / 最大副本数。当水位接近 1 时,说明弹性余量耗尽,需要 Cluster Autoscaler 介入或人工扩容。
- 常见配置示例:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: example-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: example-deploy
minReplicas: 3
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
2.2.6 Cluster Autoscaler
Cluster Autoscaler (CA) 在 Node 资源不足或过剩时自动调整集群节点数量。它与 HPA 形成“双层弹性”:HPA 调整 Pod 数量,CA 调整 Node 数量。
- 触发条件:存在因资源不足而 Pending 的 Pod,且新节点加入后可以调度这些 Pod。
- 缩容条件:Node 上所有 Pod 的请求量低于节点容量的 50%(可配置),且这些 Pod 可以被调度到其他节点。
- 水位含义:CA 的水位 = 集群总可分配资源 / 集群总容量。当水位持续高于 80% 且存在 Pending Pod 时,CA 会触发扩容。
2.3 核心概念对比总结
| 对象 | 作用域 | 弹性类型 | 水位评估核心指标 | 典型阈值 |
|---|---|---|---|---|
| Pod | 单实例 | 无(被动调度) | CPU/Memory 使用率 vs Requests | 使用率 ≤ 100% Limits |
| ReplicaSet | 副本组 | 无(被动修复) | readyReplicas / replicas | ≥ 1.0 |
| Deployment | 应用版本 | 声明式更新 | availableReplicas / desiredReplicas | ≥ 1.0 |
| Node | 单节点 | 被动(CA 控制) | 资源分配率 / 使用率 | 分配率 ≤ 80% |
| HPA | 工作负载 | 主动弹性(Pod 级) | 当前副本数 / 最大副本数 | ≤ 0.8 |
| CA | 集群 | 主动弹性(Node 级) | 集群资源分配率 | ≤ 80% 或存在 Pending Pod |
2.4 双层弹性协作流程
下图展示了 HPA 与 CA 在典型流量突增场景下的协作时序,帮助理解水位在不同层级间的传导关系。
2.5 水位评估的起点
在服务目录平台中,水位评估的起点不是 Node 或 CA,而是 Deployment 的期望副本数与实际可用副本数的偏差。当偏差持续存在时,逐层向下排查:
- 检查 Deployment 的
status.conditions:确认是否存在FailedScheduling或InsufficientMemory事件。 - 检查 ReplicaSet 的副本状态:确认
readyReplicas是否等于replicas。 - 检查 Node 的资源分配率:确认是否存在资源碎片或超卖。
- 检查 HPA 的当前副本数与最大副本数:确认弹性余量是否耗尽。
- 检查 CA 的日志与事件:确认是否存在因云厂商配额、节点池配置导致的扩容失败。
① 期望副本 vs 可用副本(Deployment 水位)
② Pod CPU/Memory 使用率 vs Requests(Pod 水位)
③ Node 资源分配率(Node 水位)
④ HPA 当前副本 / 最大副本(弹性余量)