核心定位:Git 为唯一可信源,GitHub Actions 做构建校验推送,ArgoCD 负责集群自动同步部署,全程无人工界面操作,实现声明式、可追溯、自愈式交付。
一、组件分工边界
GitHub Actions
- 代码编译、镜像构建、漏洞扫描、版本标记
- 自动更新 Git 内 K8s 清单、Helm 值文件
- 分支校验、语法检查、变更门禁、触发流程
- 不直接操作 K8s 集群 API
ArgoCD
- 监听 Git 仓库变更,对比集群实际状态
- 自动同步资源、配置漂移自愈、扩缩容管理
- 集群资源生命周期管控、部署状态观测
- 不参与代码编译打包
二、整体流转链路
代码提交 → GitHub Actions 校验+构建+更新配置 → Git 仓库配置变更 → ArgoCD 感知变更 → 自动同步至 K8s 集群 → 状态巡检+自愈
三、标准仓库目录结构
gitops-repo/
├── .github/workflows/ # GitHub Actions 流水线配置
├── apps/ # 业务应用K8s manifests
├── helm/ # Helm Chart 模板
├── overlays/ # 多环境覆盖配置 dev/test/prod
├── argocd/ # ArgoCD 应用、项目、集群配置
├── base/ # 基础通用资源
└── README.md
四、环境隔离规范
采用Kustomize Overlay做环境区分,共用基础配置,差异化覆盖
base/
overlays/
dev/
test/
prod/
ArgoCD 分别绑定不同环境目录,实现环境独立部署、互不干扰。
五、ArgoCD 核心最佳实践
1. 基础部署与权限
- 独立命名空间部署 ArgoCD,权限隔离业务集群
- 启用RBAC 最小权限,限制 Argo 仅管控指定命名空间
- 集群注册采用内部地址,禁止公网暴露集群接入入口
2. Application 标准配置模板
yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: app-prod
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/xxx/gitops-repo.git
targetRevision: main
path: overlays/prod
destination:
server: https://kubernetes.default.svc
namespace: business-prod
syncPolicy:
automated:
prune: true # 删除Git中不存在的集群资源
selfHeal: true # 配置漂移自动修复
allowEmpty: false
syncOptions:
- CreateNamespace=true
retry:
limit: 3
backoff:
duration: "30s"
factor: 2
3. 同步策略规范
- 自动同步:日常变更自动下发
- 手动审核同步:生产核心应用开启手动确认,规避风险
- 开启资源裁剪,避免残留僵尸资源
- 配置同步重试机制,应对临时网络异常
4. 项目与集群管理
- 按业务线划分 ArgoCD Project,隔离应用权限
- 多集群统一纳管,单仓库管理多集群资源
- 禁止跨项目、跨命名空间越权部署
5. 观测与告警
- 监控同步失败、资源异常、镜像拉取失败
- 对接告警通道,同步故障及时通知运维
- 界面可视化拓扑,快速查看资源层级关系
六、GitHub Actions 最佳实践
1. 流水线核心场景
- 提交校验流水线
yaml 语法、k8s 资源合法性、镜像漏洞扫描、格式校验,不合法阻断合并 - 镜像构建推送流水线
代码打包、构建镜像、推送镜像仓库,生成版本标签 - 配置自动更新流水线
更新镜像 tag、环境变量,自动提交变更到 GitOps 仓库 - 版本发布流水线
打 Tag、归档版本、生成变更日志
2. 基础工作流示例(镜像构建+更新配置)
yaml
name: Build & Update Manifest
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build and push image
run: 执行镜像构建推送脚本
- name: Update image tag in k8s yaml
run: 替换清单内镜像版本
- name: Commit and push changes
uses: stefanzweifel/git-auto-commit-action@v5
3. 安全规范
- 密钥、仓库凭证存入 GitHub Secrets,不硬编码
- 流水线禁用高危权限,按需分配访问权限
- 每次构建执行镜像漏洞扫描,高危漏洞终止发布
4. 流水线优化
- 缓存依赖包、镜像层,缩短构建耗时
- 并行执行校验、扫描任务,提升效率
- 步骤拆分清晰,失败精准定位问题
七、双工具联动标准流程
- 开发者提交业务代码,推送远程仓库
- GitHub Actions 自动触发:代码校验 → 构建镜像 → 推送仓库
- 流水线自动修改 GitOps 仓库内应用镜像版本,提交合并
- ArgoCD 轮询检测到 Git 配置变更
- ArgoCD 自动同步资源至 K8s 集群,滚动更新 Pod
- 同步完成后校验服务健康状态,异常触发告警
八、分支与发布策略
- 分支模型
- main:生产稳定分支,仅合并准入,禁止直接推送
- dev:开发分支,日常迭代提交
- tag:版本标签,对应线上正式版本
-
发布流程
开发分支开发 → PR 评审 → 合并 main → Actions 构建 → ArgoCD 自动部署 → 验证上线
-
回滚机制
Git 回退历史提交版本,ArgoCD 自动同步旧配置,快速完成业务回滚
九、安全最佳实践
- Git 仓库权限管控,仅授权人员可提交合并
- K8s Secret 不明文存放,采用 SealedSecret/外部密钥托管
- ArgoCD 界面开启登录认证,关闭匿名访问
- 所有变更留 Git 提交记录,完整审计溯源
- 禁止集群手动修改资源,以 Git 配置为唯一基准
十、高可用与故障规避
- ArgoCD 多副本部署,避免单点故障
- 仓库开启备份,防止配置文件丢失
- 生产应用关闭强制自动同步,关键变更人工复核
- 定期模拟配置漂移,验证自愈能力
- 限制单批次更新实例数,避免批量服务中断
十一、常见落地避坑
- 配置与代码仓库混淆:业务代码仓、GitOps 配置仓分离
- 关闭自动裁剪,长期堆积无效残留资源
- 密钥明文写入 yaml,造成信息泄露
- 直接操作集群资源,破坏 Git 唯一可信源规则
- 流水线无校验,错误配置直接同步上线
十二、落地实施步骤
- 搭建 GitOps 专属代码仓库,规划目录结构
- 集群部署 ArgoCD,完成集群、项目初始化
- 编写 GitHub Actions 校验、构建、更新流水线
- 创建 ArgoCD 应用,绑定对应环境 Git 路径
- 测试提交变更,验证构建-同步-自愈全流程
- 切换正式发布流程,停用手动部署方式