K8s 集群基础回顾:核心组件与资源模型
在进入压测节点自动化部署之前,必须重新夯实 Kubernetes 集群的核心基础。本章从控制面组件、工作负载节点、调度单元以及资源隔离四个维度,梳理 K8s 集群的运行骨架。理解这些基础概念,是后续编写自动化部署脚本、配置压测环境、排查集群异常的前提条件。
2.1 控制面核心组件
Kubernetes 控制面由一组独立进程组成,它们共同维护集群的期望状态。以下四个组件构成控制面的主体,任何压测节点的部署请求都必须经过它们的协作才能完成。
| 组件 | 功能定位 | 关键职责 |
|---|---|---|
| API Server | 集群统一入口 | 认证、授权、准入控制、RESTful 接口代理、etcd 唯一操作者 |
| Scheduler | Pod 调度决策 | 基于资源请求、亲和性、污点容忍度等策略,为未调度的 Pod 选择最优 Node |
| Controller Manager | 状态控制器集合 | 运行 Node Controller、Replication Controller、Endpoint Controller 等,确保实际状态逼近期望状态 |
| etcd | 分布式键值存储 | 存储所有集群对象数据,是集群状态的唯一持久化来源 |
压测视角: API Server 是压测请求的第一站。如果 API Server 因资源不足而响应延迟,整个集群的调度和状态同步都会阻塞。在压测节点部署前,建议对 API Server 配置独立的资源配额和限流参数。
2.2 Pod 与 Node 的关系
Pod 是 Kubernetes 中最小的调度和运行单元,Node 是承载 Pod 的工作节点。两者之间的关系可以概括为“调度绑定、资源供给、生命周期耦合”。
- 调度绑定: Pod 通过 Scheduler 绑定到某个 Node,绑定后由该 Node 上的 kubelet 负责启动和管理。
- 资源供给: Node 提供 CPU、内存、磁盘、网络等物理或虚拟资源,Pod 通过 requests 和 limits 声明所需资源量。
- 生命周期耦合: Pod 的生命周期受 Node 状态影响。Node 宕机后,其上的 Pod 会被 Controller Manager 重新调度到其他健康 Node。
关键指标: 压测节点部署时,需关注 Node 的 allocatable 资源(总容量减去系统预留和 kubelet 预留),避免 Pod 资源请求超出 Node 实际可分配量。
2.3 命名空间与资源配额
命名空间(Namespace)提供虚拟集群隔离机制,资源配额(ResourceQuota)则限制命名空间级别的资源消耗总量。在压测场景中,合理使用命名空间和配额可以防止压测任务影响生产或其他测试环境。
2.3.1 命名空间的核心作用
- 环境隔离: 将压测环境、预发环境、生产环境划分到不同命名空间,避免资源冲突和误操作。
- 权限边界: 结合 RBAC,为不同团队或项目授予特定命名空间的访问权限。
- 资源统计: 按命名空间聚合资源使用量,便于成本核算和容量规划。
2.3.2 资源配额配置示例
以下是一个针对压测命名空间的 ResourceQuota 配置,限制 CPU、内存、Pod 数量和 PVC 存储总量:
apiVersion: v1
kind: ResourceQuota
metadata:
name: stress-test-quota
namespace: stress-test
spec:
hard:
requests.cpu: "16"
requests.memory: "64Gi"
limits.cpu: "32"
limits.memory: "128Gi"
pods: "50"
persistentvolumeclaims: "10"
requests.storage: "200Gi"
避坑提示: ResourceQuota 只限制创建时的资源请求,不限制已运行 Pod 的实际使用量。如果压测 Pod 运行时内存泄漏,即使未超出配额,也可能导致 Node 内存耗尽。建议同时配置 LimitRange 来约束单个 Pod 的资源范围。
2.4 组件协作流程:Pod 创建全链路
理解 Pod 从创建到运行的完整链路,有助于在压测节点部署失败时快速定位故障点。以下是一个标准 Pod 创建流程:
- 用户提交 Pod YAML 到 API Server,经过认证、授权和准入控制检查。
- API Server 将 Pod 对象写入 etcd,并返回创建成功响应。
- Scheduler 通过 watch 机制发现未调度的 Pod,根据调度策略选择合适 Node,将绑定信息写回 API Server。
- 目标 Node 上的 kubelet 通过 watch 发现 Pod 被调度到本节点,调用容器运行时创建容器。
- kubelet 更新 Pod 状态 为 Running,并持续上报健康检查结果。
压测部署关键点: 在自动化部署压测节点时,建议在步骤 2 之后增加 kubectl wait --for=condition=Ready pod/<name> 等待逻辑,确保 Pod 真正就绪后再下发压测任务,避免因调度延迟导致任务空跑。
2.5 本章小结
K8s 控制面组件(API Server、Scheduler、Controller Manager)与工作节点组件(kubelet、kube-proxy、容器运行时)共同构成集群的调度和执行骨架。Pod 与 Node 之间通过调度绑定和资源供给建立运行关系,命名空间与 ResourceQuota 则提供多租户隔离和资源上限控制。这些基础概念是后续自动化部署压测节点的理论基石,也是排查部署异常的第一手排查路径。