作为技术支持工程师,以下是我常用的GitOps+Kubernetes持续交付解决方案,步骤清晰且经过生产验证:
-
核心组件选型
- Git仓库:GitLab/GitHub(存储Kubernetes manifests和Helm charts)
- CI工具:GitLab CI/Jenkins(构建镜像+更新Git仓库)
- CD工具:Argo CD(GitOps控制器)
- 镜像仓库:Harbor/Docker Registry
- 监控:Prometheus + Grafana
-
实施流程 (1) 开发提交代码到Feature分支 (2) CI流程:
- 执行单元测试
- 构建Docker镜像并推送到Registry
- 自动更新Git仓库中的k8s manifests(image tag) (3) 创建Merge Request到生产分支 (4) 人工审核后合并到main分支 (5) Argo CD检测Git仓库变更(每3分钟轮询):
- 自动同步集群状态与Git定义
- 执行helm upgrade或kubectl apply (6) 通过健康检查后流量切换
-
Argo CD配置示例
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: production-app spec: project: default source: repoURL: https://gitlab.com/your-repo.git targetRevision: HEAD path: k8s/production destination: server: https://kubernetes.default.svc namespace: production syncPolicy: automated: prune: true selfHeal: true -
关键保障机制
- 回滚:git revert触发Argo CD自动回退
- 权限控制:RBAC限制生产分支合并权限
- 安全扫描:CI阶段集成Trivy镜像扫描
- 状态监控:Argo CD Dashboard实时显示同步状态
-
常见问题处理
- 同步失败:检查manifest语法错误及资源配额
- 版本不一致:强制同步命令
argocd app sync <app-name> - 配置冲突:通过Git分支策略限制并行修改
该方案实现平均部署时间从小时级缩短至分钟级,且保证集群状态与Git记录完全一致。