1. 课程导论:策略即代码与资源配额模型
1.1 策略即代码(Policy as Code)概念
策略即代码(Policy as Code, PaC)是将传统运维策略、安全规则与合规约束,以机器可读的声明式代码形式进行定义、版本化、测试与自动执行的方法论。它打破了“策略存在于文档或人工审批流程中”的旧模式,将策略转化为可编程、可审计、可集成的软件构件。
核心转变: 从“人读策略”到“机读策略”,从“事后审计”到“事前拦截”。
在云原生架构中,策略即代码通常通过 准入控制器(Admission Controller)、策略引擎(如 OPA/Gatekeeper、Kyverno) 以及 GitOps 工作流 实现。其关键特征包括:
- 声明式定义: 使用 YAML、JSON 或 Rego 等 DSL 描述策略意图,而非编写过程式脚本。
- 版本化与协作: 策略代码存储在 Git 仓库中,支持分支、PR 审查、回滚与审计。
- 自动化执行: 在资源创建、更新或运行时自动触发策略评估,无需人工介入。
- 可测试性: 策略可编写单元测试与集成测试,确保逻辑正确性。
| 维度 | 传统策略管理 | 策略即代码 |
|---|---|---|
| 载体 | Word/PDF 文档、Wiki 页面 | YAML/Rego 代码文件 |
| 执行方式 | 人工检查、定期审计 | 自动准入控制、实时评估 |
| 变更流程 | 邮件审批、工单流转 | Git PR + CI/CD 流水线 |
| 一致性 | 依赖个人经验,易产生偏差 | 代码即真理,环境间完全一致 |
| 审计追溯 | 困难,依赖日志与记忆 | Git 历史 + 策略评估日志 |
1.2 资源配额模型在云原生架构中的重要性
在 Kubernetes 等云原生平台中,资源配额模型(Resource Quota Model) 是保障多租户隔离、成本控制与集群稳定性的核心机制。它通过限制命名空间(Namespace)级别的资源使用上限,防止单个团队或应用“抢占”集群全部资源,导致其他服务不可用。
关键洞察: 资源配额不是“限制创新”,而是“划定边界”。没有配额的多租户集群,本质上是一个“公地悲剧”的温床。
资源配额模型通常涵盖以下维度:
- 计算资源: CPU 请求/限制、内存请求/限制。
- 存储资源: 持久卷声明(PVC)数量、总存储容量。
- 对象数量: Pod、Service、ConfigMap、Secret 等 K8s 对象的最大数量。
- 扩展资源: GPU、FPGA 等异构计算资源。
当策略即代码与资源配额模型结合时,可以实现:
- 动态配额分配: 根据团队规模、项目阶段或时间窗口自动调整配额。
- 合规性保障: 确保所有命名空间的配额定义符合组织标准(如:生产环境必须设置 CPU 限制)。
- 成本可视化: 配额与实际使用量的差异直接反映资源浪费或过度配置。
- 自动化治理: 新命名空间创建时自动注入配额策略,无需运维人员手动配置。
| 场景 | 无策略即代码 | 有策略即代码 |
|---|---|---|
| 新团队入驻 | 运维手动创建配额,耗时 30 分钟 | Git PR 提交配额定义,5 分钟自动生效 |
| 配额违规 | 事后告警,人工介入 | 准入控制器直接拒绝,并返回明确错误 |
| 配额审计 | 逐集群检查,容易遗漏 | Git 仓库中所有配额定义一目了然 |
| 配额变更 | 工单审批,变更记录混乱 | Git 历史完整记录每次变更与审批人 |
1.3 本课程学习目标与前置知识
学习目标
完成本课程后,你将能够:
- 理解 策略即代码在资源配额管理中的架构定位与设计模式。
- 搭建 基于 OPA/Gatekeeper 或 Kyverno 的策略即代码环境。
- 编写 资源配额相关的策略规则(如:强制设置 CPU 限制、限制 PVC 数量)。
- 集成 策略引擎到 GitOps 流水线(ArgoCD / Flux),实现“策略即代码”的完整闭环。
- 调试 策略冲突与性能问题,并建立策略监控与告警体系。
注意: 本课程聚焦于“架构视角”下的策略即代码实现,而非基础 K8s 操作教程。请确保你已具备以下前置知识。
前置知识要求
| 领域 | 具体要求 | 推荐学习资源 |
|---|---|---|
| Kubernetes 基础 | 理解 Pod、Namespace、RBAC、ConfigMap 等核心概念;能使用 kubectl 进行基本操作 | K8s 官方文档“入门”章节 |
| YAML 编写 | 熟练编写 K8s 资源清单;理解声明式配置语法 | YAML 官方规范 + K8s 示例 |
| Git 工作流 | 掌握 Git 分支、PR、Merge 等协作流程 | Git 官方教程 |
| CI/CD 基础 | 了解 Jenkins、GitLab CI 或 GitHub Actions 的基本流水线概念 | 任意 CI 工具的快速入门 |
| Linux 命令行 | 能使用终端执行命令、编辑文件、查看日志 | Linux 基础教程 |
环境准备清单
在开始课程实验前,请确保你的开发环境满足以下条件:
- Kubernetes 集群: 推荐使用 kind 或 minikube 在本地搭建单节点集群(K8s v1.24+)。
- kubectl: 版本与集群匹配,并配置好 kubeconfig。
- OPA Gatekeeper 或 Kyverno: 至少选择一个策略引擎进行安装(课程将提供两种方案的对比)。
- Git 客户端: 用于管理策略代码仓库。
- 代码编辑器: 推荐 VS Code 配合 YAML 插件。
建议: 如果你对 OPA Rego 语法完全陌生,不必担心。本课程将从基础策略模板开始,逐步深入到复杂规则。我们会在第 3 章专门讲解 Rego 语法入门。