第 8 章 · GitOps 与 Helm 发布
本章目标:从「Jenkins 里 kubectl」演进到 Git 为唯一真相源;用 Helm Chart + Argo CD 自动同步 demo-mall;实现可审计、可回滚的配置管理;与 ch03 CI 分工清晰。
学时建议:2.5~3 小时(含 2 小时跟练)
前置:ops-deploy ch03 CI/CD;ch02 env-matrix;git-collab ch05 PR 流程。
8.1 场景说明
| 项目 | 内容 |
|---|---|
| 背景 | 运维在 应用部署 界面改 prod 副本数,未同步 Git;三人各自 kubectl 导致集群漂移 |
| 痛点 | 无法 audit「谁改了 prod」;回滚靠记忆 |
| 你的角色 | DevOps,建立 demo-mall-deploy 仓库与 Argo CD Application |
| 本章任务 | Helm upgrade staging;Git 改 image.tag 驱动发布;prod 手动 Sync |
| 约束 | prod 禁止 automated sync;staging 可 selfHeal |
8.2 学完你能
| 能力 | 验收标准 |
|---|---|
| GitOps 原则 | 说清声明式同步 vs 界面 kubectl |
| Helm 分环境 | values-staging / values-prod 差异 |
| Argo Application | 编写 YAML 并解释 syncPolicy |
| CI 分工 | Jenkins 只更新 Git tag,不直接 kubectl prod |
| Git 回滚 | revert commit 恢复版本 |
| 小紫路径 | PaaS 装 Argo + 应用部署导入 YAML |
8.3 为什么需要 GitOps
| 模式 | 问题 | GitOps 优势 |
|---|---|---|
| 界面改配置 | 漂移、不可审计 | Git 版本化 + PR |
| Jenkins kubectl | 集群外凭据、难复现 | 集群内 Argo reconcile |
| 手工 apply | 依赖个人在场 | 自动同步 staging |
原则:期望状态在 Git;集群实际状态由 Argo 持续对齐;差异可告警或 selfHeal。
8.4 仓库结构
demo-mall-deploy/
├── charts/demo-api/
│ ├── Chart.yaml
│ ├── values.yaml # 默认
│ ├── values-staging.yaml
│ ├── values-prod.yaml
│ └── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── hpa.yaml
├── apps/
│ ├── staging-app.yaml # Argo Application
│ └── prod-app.yaml
└── README.md
你应该看到:Gitea 仓库创建成功;charts 与 ch02 env-matrix 字段一致。
8.5 逐步跟练 · 第一步:Helm values 分环境(约 35 分钟)
values-staging.yaml:
replicaCount: 2
image:
repository: registry.devops.svc:5000/demo-api
tag: "142-a3f9c21"
resources:
requests: { cpu: 250m, memory: 256Mi }
limits: { cpu: 500m, memory: 512Mi }
env:
LOG_LEVEL: INFO
FEATURE_NEW_CHECKOUT: "true"
values-prod.yaml:
replicaCount: 3
image:
repository: registry.devops.svc:5000/demo-api
tag: "142-a3f9c21" # staging 验证通过后晋升
resources:
requests: { cpu: 500m, memory: 512Mi }
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 10
env:
LOG_LEVEL: WARN
FEATURE_NEW_CHECKOUT: "false"
含义:同 build tag 先进 staging,业务签字后 仅改 prod values 的 tag(或通过 promote PR)。
你应该看到:helm template 渲染出 2 vs 3 副本差异。
8.6 逐步跟练 · 第二步:Argo CD Application(约 40 分钟)
PaaS 商店 安装 Argo CD(devops Namespace)。
apps/staging-app.yaml:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: demo-api-staging
namespace: argocd
spec:
project: default
source:
repoURL: https://gitea.devops.svc/cluster/demo-mall-deploy
path: charts/demo-api
targetRevision: main
helm:
valueFiles: [values-staging.yaml]