3. Kubernetes 资源模型:Pod、Node、Namespace、Resource Quota、LimitRange 基础概念

在云原生成本分摊与容量突增场景中,理解 Kubernetes 的资源模型是进行水位预测和成本核算的基石。Kubernetes 的资源管理并非简单的“申请-分配”,而是通过一套层次化的抽象层,将物理/虚拟机的计算资源(CPU、内存)以逻辑单元的形式交付给应用。本章将深入剖析 Pod、Node、Namespace、Resource Quota 和 LimitRange 这五个核心概念,并揭示它们在成本分摊模型中的角色。

3.1 资源抽象层次:从硬件到容器

Kubernetes 的资源模型可以看作一个四层金字塔,每一层都定义了不同的资源粒度和管控边界。理解这个层次结构,有助于我们定位成本分摊的“最小可计量单元”。

核心观点: Pod 是资源请求的最小单位,Node 是资源供给的物理边界,Namespace 是资源隔离的逻辑边界,ResourceQuota 和 LimitRange 则是资源管控的策略工具。
Kubernetes 资源抽象四层模型 Kubernetes 资源抽象层次结构 Node(节点) 资源供给池:CPU、内存、磁盘、网络 Namespace(命名空间) 资源隔离与配额边界 Pod(最小调度单元) 资源请求(Requests)与限制(Limits) Container(容器) 实际运行进程,共享 Pod 网络与存储 成本分摊粒度:Pod 级别 → 按 Namespace 聚合 → 最终分摊到业务单元

3.2 Pod:最小调度与成本核算单元

Pod 是 Kubernetes 中可创建和部署的最小计算单元,也是成本分摊模型中最基础的计量对象。一个 Pod 可以包含一个或多个容器,这些容器共享同一个网络命名空间、存储卷以及资源约束。

3.2.1 Pod 的资源声明:Requests 与 Limits

每个 Pod 中的容器都可以声明两类资源参数,这是 HPA 水位预测和成本计算的直接数据来源:

参数 含义 对调度的影响 对成本的影响
requests 容器启动时保证的最小资源量 调度器依据 requests 选择 Node 即使 Pod 未使用满,也按 requests 计费(预留成本)
limits 容器允许使用的资源上限 超过 limits 时触发 OOMKill 或 CPU 节流 影响超卖比例和 Node 利用率
FinOps 实践提示: 在成本分摊模型中,requests 通常作为“预留成本”的基准,而实际使用量(通过 metrics-server 采集)则用于计算“可变成本”。两者之间的差值,就是潜在的资源浪费或超卖空间。

3.2.2 Pod 资源声明示例

apiVersion: v1
kind: Pod
metadata:
  name: cost-demo-pod
  namespace: production
spec:
  containers:
  - name: app-container
    image: nginx:latest
    resources:
      requests:
        cpu: "500m"        # 0.5 个 CPU 核心
        memory: "256Mi"    # 256 Mebibytes
      limits:
        cpu: "1000m"       # 1 个 CPU 核心
        memory: "512Mi"    # 512 Mebibytes

3.3 Node:资源供给与成本池

Node 是 Kubernetes 集群中的工作节点(物理机或虚拟机),它提供了 Pod 运行所需的 CPU、内存、磁盘和网络资源。在成本模型中,Node 是“成本池”的载体——所有 Node 的总成本(包括计算、存储、网络、管理开销)构成了集群的总拥有成本(TCO)。

  • 节点容量(Capacity): Node 可分配的总资源量,例如 4 vCPU、16 GiB 内存。
  • 节点可分配资源(Allocatable): 扣除系统组件(kubelet、操作系统)后的可用资源,是调度器实际参考的值。
  • 节点利用率: 所有 Pod 的 requests 总和 / Node 的 Allocatable。利用率越高,单位成本越低。
容量突增风险: 当 HPA 触发扩容时,新 Pod 必须被调度到有足够空闲资源的 Node 上。如果 Node 资源碎片化严重或预留不足,可能导致扩容失败或 Pod 处于 Pending 状态,直接影响业务可用性。

3.4 Namespace:逻辑隔离与成本分摊边界

Namespace 是 Kubernetes 中用于实现多租户资源隔离的逻辑边界。在成本分摊实践中,Namespace 通常映射到不同的业务线、团队、环境(如 dev/staging/prod)或客户项目。

Namespace 成本分摊边界示意图 Namespace 作为成本分摊边界 Kubernetes 集群(Node 资源池) Namespace: team-a Pod A1 Pod A2 Pod A3 Pod A4 Namespace: team-b Pod B1 Pod B2 Pod B3 Namespace: system Pod S1 Pod S2 成本分摊规则:按 Namespace 聚合 Pod 的 requests/实际用量,再按比例分摊 Node 成本

3.5 Resource Quota:资源配额管控

Resource Quota 是作用于 Namespace 级别的资源总量限制策略。它确保单个 Namespace 不会过度消耗集群资源,从而保障多租户场景下的公平性。在成本模型中,Quota 定义了每个业务单元的资源“预算上限”。

3.5.1 常用配额类型

资源类型 示例 说明
requests.cpu 10 该 Namespace 下所有 Pod 的 CPU requests 总和不超过 10 核
requests.memory 20Gi 该 Namespace 下所有 Pod 的内存 requests 总和不超过 20 GiB
limits.cpu 20 该 Namespace 下所有 Pod 的 CPU limits 总和不超过 20 核
limits.memory 40Gi 该 Namespace 下所有 Pod 的内存 limits 总和不超过 40 GiB
count/pods 100 该 Namespace 下最多允许创建 100 个 Pod

3.5.2 Resource Quota 配置示例

apiVersion: v1
kind: ResourceQuota
metadata:
  name: production-quota
  namespace: production
spec:
  hard:
    requests.cpu: "10"
    requests.memory: "20Gi"
    limits.cpu: "20"
    limits.memory: "40Gi"
    count/pods: "100"
    count/services: "20"
    count/secrets: "50"
成本关联: Resource Quota 的 hard 值直接决定了该 Namespace 的最大资源消耗上限。在 FinOps 实践中,Quota 的设定应与业务预算对齐——超出 Quota 的扩容请求将被 API Server 拒绝,从而防止成本失控。

3.6 LimitRange:容器级资源约束

LimitRange 是作用于 Namespace 级别的默认资源约束策略,它可以在 Pod 未显式声明资源时提供默认值,并强制容器资源在指定范围内。这对于防止“孤儿 Pod”或“资源黑洞”至关重要。

3.6.1 LimitRange 的核心能力

  • 默认值注入: 如果 Pod 未设置 requests/limits,LimitRange 会自动注入默认值。
  • 范围限制: 强制每个容器的 requests/limits 必须在 min 和 max 之间。
  • 比例约束: 可设置 maxLimitRequestRatio,例如限制 limits/requests 不超过 3:1,防止过度超卖。

3.6.2 LimitRange 配置示例

apiVersion: v1
kind: LimitRange
metadata:
  name: production-limits
  namespace: production
spec:
  limits:
  - max:
      cpu: "2"
      memory: "2Gi"
    min:
      cpu: "100m"
      memory: "64Mi"
    default:
      cpu: "500m"
      memory: "256Mi"
    defaultRequest:
      cpu: "200m"
      memory: "128Mi"
    maxLimitRequestRatio:
      cpu: "3"

3.7 四者关系与成本分摊映射

将上述四个概念串联起来,可以清晰地看到它们在成本分摊模型中的角色:

概念 成本分摊角色 数据来源 对 HPA 水位预测的影响
Pod 最小成本核算单元 Pod 的 requests/limits 字段 HPA 基于 Pod 的 CPU/内存实际使用率触发扩缩容
Node 成本池(TCO 载体) 云厂商账单 / 物理机折旧 Node 剩余容量决定 HPA 扩容是否成功
Namespace 成本分摊边界(业务线/环境) Pod 所属 Namespace 标签 不同 Namespace 可配置独立的 HPA 策略
Resource Quota 成本预算上限 Quota 的 hard 字段 HPA 扩容不能超过 Quota 上限,否则扩容失败
LimitRange 资源使用规范(防止浪费) LimitRange 的 default/min/max 字段 确保 HPA 新创建的 Pod 有合理的资源规格
实战建议: 在搭建成本分摊系统时,建议以 Namespace + Pod 的 requests 作为基础分摊维度。对于突增场景,结合 HPA 的当前副本数和目标利用率,可以预测未来几分钟内的资源消耗趋势,从而提前评估是否需要调整 Quota 或扩容 Node。