2. Kubernetes 资源模型基础:Pod、Node、Namespace、ResourceQuota、LimitRange 概念与关系

在云原生成本分摊模型中,理解 Kubernetes 的资源模型是进行成本核算与分摊的基石。Kubernetes 的资源管理并非简单的“虚拟机 + 进程”模式,而是通过一套层次化的抽象对象来定义、隔离和限制计算资源。本章将深入剖析 Pod、Node、Namespace、ResourceQuota 和 LimitRange 这五个核心概念及其相互关系,为后续的成本标签、计量与分摊模型打下坚实基础。

2.1 核心资源对象:Pod 与 Node

Pod 是 Kubernetes 中最小的可部署计算单元,也是资源分配与调度的基本单位。Node 则是集群中的工作节点,提供实际的 CPU、内存、存储等物理或虚拟资源。

关键理解: Pod 是“资源消费者”,Node 是“资源提供者”。成本分摊的起点,就是将 Pod 的消耗映射到其运行的 Node 上。

2.1.1 Pod:资源消费的最小单元

  • 资源请求(Requests): Pod 启动时保证获得的最小资源量,调度器依据此值选择 Node。
  • 资源限制(Limits): Pod 运行时允许使用的最大资源量,用于防止资源争抢。
  • QoS 等级: 基于 Requests 与 Limits 的配置,Pod 被分为 Guaranteed、Burstable、BestEffort 三类,直接影响调度与驱逐优先级。

2.1.2 Node:集群资源的物理抽象

  • 可分配资源(Allocatable): Node 上可供 Pod 使用的实际资源总量(总容量减去系统预留与 kubelet 预留)。
  • 资源容量(Capacity): Node 的总硬件资源,如 8 核 CPU、32GB 内存。
  • 节点状态: Ready、NotReady 等状态影响 Pod 调度。
成本视角: Node 的成本(如云服务器实例费用)是集群总成本的直接来源。成本分摊的核心公式为:Pod 成本 = Node 成本 × (Pod 资源请求 / Node 可分配资源)。
Pod 与 Node 资源关系图 Pod 与 Node 资源关系图 Node(资源提供者) 可分配资源:8 核 CPU / 32 GB 内存 Pod A Requests: 2 核 / 4 GB Limits: 4 核 / 8 GB QoS: Burstable Pod B Requests: 1 核 / 2 GB Limits: 2 核 / 4 GB QoS: Guaranteed Pod C Requests: 0 核 / 0 GB Limits: 1 核 / 2 GB QoS: BestEffort Pod 是资源消费者,Node 是资源提供者。成本分摊基于 Pod 的 Requests 与 Node 的 Allocatable。

2.2 资源隔离与组织:Namespace

Namespace 是 Kubernetes 中用于实现多租户资源隔离的逻辑分组机制。它不提供物理隔离,但为资源配额、访问控制和成本归属提供了边界。

特性 说明 成本分摊意义
资源隔离 不同 Namespace 中的 Pod、Service、ConfigMap 等资源相互不可见(默认)。 可作为成本中心或业务单元的边界。
配额管理 通过 ResourceQuota 限制 Namespace 级别的总资源消耗。 防止单个团队过度使用资源,保障成本可控。
默认限制 通过 LimitRange 设置 Pod 或容器的默认 Requests/Limits。 避免未设置资源限制的 Pod 导致成本黑洞。
标签继承 Namespace 的标签可被其下的资源继承(需配置)。 便于成本标签的自动传播与聚合。
常见误区: Namespace 不是安全隔离边界。不要将敏感工作负载仅依赖 Namespace 进行安全隔离,应结合 NetworkPolicy、RBAC 等机制。

2.3 资源控制策略:ResourceQuota 与 LimitRange

ResourceQuota 和 LimitRange 是 Kubernetes 提供的两种资源治理策略,用于在 Namespace 级别控制资源分配行为,是 FinOps 实践中“成本控制”的关键工具。

2.3.1 ResourceQuota:Namespace 资源总预算

ResourceQuota 定义了 Namespace 内所有 Pod 的资源消耗上限,包括 CPU、内存、存储卷数量、Service 数量等。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: team-a-quota
  namespace: team-a
spec:
  hard:
    requests.cpu: "10"        # 所有 Pod 的 CPU 请求总和不超过 10 核
    requests.memory: "20Gi"   # 所有 Pod 的内存请求总和不超过 20 Gi
    limits.cpu: "20"          # 所有 Pod 的 CPU 限制总和不超过 20 核
    limits.memory: "40Gi"     # 所有 Pod 的内存限制总和不超过 40 Gi
    persistentvolumeclaims: "5" # PVC 数量不超过 5 个
    pods: "20"                # Pod 数量不超过 20 个

2.3.2 LimitRange:Pod 资源默认值与边界

LimitRange 在 Namespace 级别设置 Pod 或容器的默认 Requests/Limits,以及最小/最大资源约束,防止单个 Pod 过度占用资源。

apiVersion: v1
kind: LimitRange
metadata:
  name: team-a-limits
  namespace: team-a
spec:
  limits:
  - max:                       # 单个容器最大资源限制
      cpu: "4"
      memory: "8Gi"
    min:                       # 单个容器最小资源请求
      cpu: "100m"
      memory: "128Mi"
    default:                   # 默认 Limits(如果 Pod 未指定)
      cpu: "500m"
      memory: "512Mi"
    defaultRequest:            # 默认 Requests(如果 Pod 未指定)
      cpu: "200m"
      memory: "256Mi"
    type: Container
FinOps 最佳实践: 为每个 Namespace 同时配置 ResourceQuota 和 LimitRange。ResourceQuota 控制总预算,LimitRange 确保单个 Pod 行为合规,两者结合可有效避免成本失控。

2.4 概念关系与成本分摊链路

这五个概念构成了 Kubernetes 资源管理的完整链路:Node 提供物理资源 → Namespace 划分逻辑边界 → ResourceQuota 设定边界预算 → LimitRange 规范单元行为 → Pod 作为最终资源消费者。

Kubernetes 资源模型关系图 Kubernetes 资源模型关系图 Node 层:物理/虚拟资源池(CPU、内存、存储) Namespace 层:逻辑隔离与成本中心边界 ResourceQuota(总预算) + LimitRange(默认与边界) 控制策略层:防止资源滥用与成本失控 Pod 层:最小资源消费单元(Requests / Limits / QoS) 成本分摊链路:Node 成本 → Namespace 聚合 → 控制策略约束 → Pod 级计量

2.5 概念对比总结

概念 作用范围 核心功能 成本分摊角色
Node 集群 提供物理/虚拟计算资源 成本源头(账单入口)
Pod Node 运行容器的最小单元 成本计量对象(计量粒度)
Namespace 集群 逻辑隔离与多租户 成本中心(分摊边界)
ResourceQuota Namespace 限制 Namespace 总资源 成本预算控制(上限)
LimitRange Namespace 设置 Pod 默认资源与边界 成本行为规范(默认值)