2. 核心概念:Deployment、ReplicaSet、Pod、Node、Cluster Autoscaler、Horizontal Pod Autoscaler (HPA) 基础

在进行水位评估与容量规划之前,必须统一团队对 Kubernetes 核心调度单元与弹性组件的认知。本章将逐一拆解从最细粒度的 Pod 到集群级 Cluster Autoscaler 的职责边界、生命周期与水位含义,为后续的指标采集与阈值设计奠定基础。

2.1 核心对象层级关系

下图展示了从应用负载到基础设施的完整控制链路。理解这一层级是水位评估的前提:每一层的“水位”含义不同,但最终都会向上或向下传导。

Kubernetes 核心对象层级关系图 Kubernetes 核心对象层级关系 Cluster Autoscaler Node(工作节点) Horizontal Pod Autoscaler (HPA) Deployment ReplicaSet Pod(最小调度单元) 集群级弹性 增减 Node 数量 工作负载级弹性 增减 Pod 副本数 应用调度单元 容器组与资源请求

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 控制滚动过程中的资源占用,直接影响水位波动的幅度。
水位评估要点: 在服务目录平台中,Deployment 的 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 会触发扩容。
常见误区: HPA 和 CA 不是互斥的,而是协作关系。HPA 解决 Pod 级弹性,CA 解决 Node 级弹性。如果只配置 HPA 而不配置 CA,当所有 Node 资源耗尽时,HPA 将无法创建新 Pod,导致服务降级。

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 在典型流量突增场景下的协作时序,帮助理解水位在不同层级间的传导关系。

HPA 与 Cluster Autoscaler 协作流程 HPA 与 Cluster Autoscaler 双层弹性协作流程 ① 流量突增 Pod CPU 使用率 > 70% ② HPA 评估 计算期望副本数 ③ Deployment 扩容 创建新 Pod Pod 调度成功? 正常 ④ Pod Pending 节点资源不足 ⑤ CA 触发扩容 创建新 Node ⑥ 重新调度 Pod 运行 水位传导关系 Pod 水位升高 → HPA 增加副本数 → Node 水位升高 → CA 增加节点数 缩容时反向传导:Pod 水位降低 → HPA 减少副本 → Node 水位降低 → CA 回收节点

2.5 水位评估的起点

在服务目录平台中,水位评估的起点不是 Node 或 CA,而是 Deployment 的期望副本数与实际可用副本数的偏差。当偏差持续存在时,逐层向下排查:

  1. 检查 Deployment 的 status.conditions:确认是否存在 FailedScheduling 或 InsufficientMemory 事件。
  2. 检查 ReplicaSet 的副本状态:确认 readyReplicas 是否等于 replicas。
  3. 检查 Node 的资源分配率:确认是否存在资源碎片或超卖。
  4. 检查 HPA 的当前副本数与最大副本数:确认弹性余量是否耗尽。
  5. 检查 CA 的日志与事件:确认是否存在因云厂商配额、节点池配置导致的扩容失败。
实践建议: 在服务目录平台中,为每个 Deployment 建立水位仪表盘,至少包含以下四个面板:
① 期望副本 vs 可用副本(Deployment 水位)
② Pod CPU/Memory 使用率 vs Requests(Pod 水位)
③ Node 资源分配率(Node 水位)
④ HPA 当前副本 / 最大副本(弹性余量)