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 历史 + 策略评估日志
策略即代码(PaC)核心工作流 策略定义 YAML / Rego Git 仓库 版本化 + PR 审查 CI/CD 流水线 测试 + 部署 策略引擎 OPA/Kyverno K8s 准入控制器 Mutating / Validating 资源请求 Pod / Namespace / PVC 💡 策略即代码的核心价值 将策略从“人治”变为“法治”,实现云原生环境下的自动化合规与资源治理

1.2 资源配额模型在云原生架构中的重要性

在 Kubernetes 等云原生平台中,资源配额模型(Resource Quota Model) 是保障多租户隔离、成本控制与集群稳定性的核心机制。它通过限制命名空间(Namespace)级别的资源使用上限,防止单个团队或应用“抢占”集群全部资源,导致其他服务不可用。

关键洞察: 资源配额不是“限制创新”,而是“划定边界”。没有配额的多租户集群,本质上是一个“公地悲剧”的温床。

资源配额模型通常涵盖以下维度:

  • 计算资源: CPU 请求/限制、内存请求/限制。
  • 存储资源: 持久卷声明(PVC)数量、总存储容量。
  • 对象数量: Pod、Service、ConfigMap、Secret 等 K8s 对象的最大数量。
  • 扩展资源: GPU、FPGA 等异构计算资源。

当策略即代码与资源配额模型结合时,可以实现:

  1. 动态配额分配: 根据团队规模、项目阶段或时间窗口自动调整配额。
  2. 合规性保障: 确保所有命名空间的配额定义符合组织标准(如:生产环境必须设置 CPU 限制)。
  3. 成本可视化: 配额与实际使用量的差异直接反映资源浪费或过度配置。
  4. 自动化治理: 新命名空间创建时自动注入配额策略,无需运维人员手动配置。
场景 无策略即代码 有策略即代码
新团队入驻 运维手动创建配额,耗时 30 分钟 Git PR 提交配额定义,5 分钟自动生效
配额违规 事后告警,人工介入 准入控制器直接拒绝,并返回明确错误
配额审计 逐集群检查,容易遗漏 Git 仓库中所有配额定义一目了然
配额变更 工单审批,变更记录混乱 Git 历史完整记录每次变更与审批人
策略即代码驱动的资源配额模型 策略即代码引擎 OPA / Kyverno 配额策略定义 Git 仓库 / ConfigMap 资源配额对象 ResourceQuota / LimitRange Kubernetes 集群(多命名空间) 团队 A 命名空间 | 团队 B 命名空间 | 团队 C 命名空间 🔑 核心价值 策略即代码将配额管理从“手动配置”升级为“自动化治理”,实现可审计、可复用的资源管控

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 基础教程

环境准备清单

在开始课程实验前,请确保你的开发环境满足以下条件:

  1. Kubernetes 集群: 推荐使用 kind 或 minikube 在本地搭建单节点集群(K8s v1.24+)。
  2. kubectl: 版本与集群匹配,并配置好 kubeconfig。
  3. OPA Gatekeeper 或 Kyverno: 至少选择一个策略引擎进行安装(课程将提供两种方案的对比)。
  4. Git 客户端: 用于管理策略代码仓库。
  5. 代码编辑器: 推荐 VS Code 配合 YAML 插件。
建议: 如果你对 OPA Rego 语法完全陌生,不必担心。本课程将从基础策略模板开始,逐步深入到复杂规则。我们会在第 3 章专门讲解 Rego 语法入门。