阶段四:基于ArgoCD实现服务的自动化发布
二、ArgoCD 概述
ArgoCD 是一个面向 Kubernetes 的声明式持续交付工具,属于 CNCF 生态中的热门 GitOps 工具。
它的核心思想是:把应用部署配置统一放到 Git 仓库中,以 Git 中的内容作为系统期望状态,再由 ArgoCD 持续监听仓库与集群状态,自动完成同步、修正和发布。
传统发布方式往往依赖人工执行 kubectl apply、helm upgrade 或脚本发布,存在流程不可审计、环境不一致、误操作多等问题。
ArgoCD 通过 GitOps 模式把“发布动作”转换为“提交配置变更”,实现发布标准化、可追踪和可回滚。
三、ArgoCD 的应用场景
- Kubernetes 应用持续发布与自动部署
- 开发、测试、预发、生产多环境配置管理
- 微服务项目的统一发布与版本治理
- 多集群、多命名空间应用集中交付
- 配合 Helm、Kustomize 管理复杂部署模板
- 通过 Git 审批流实现变更审计与合规管理
- 生产故障时基于 Git 历史版本快速回滚
四、ArgoCD 原理
ArgoCD 的核心原理可以概括为三句话:
- Git 仓库中的配置是期望状态
- Kubernetes 集群中的资源是实际状态
- ArgoCD 持续比对两者差异,并驱动实际状态向期望状态收敛
ArgoCD 的核心组件包括:
argocd-server:提供 Web UI、API 和 CLI 接口
argocd-repo-server:负责拉取 Git 仓库内容,并渲染 Helm、Kustomize、YAML 等配置
argocd-application-controller:持续监控 Application 资源,比较目标状态和实际状态,并执行同步动作
Redis:用于缓存和加速状态处理
Dex:可选的统一身份认证组件
ArgoCD 的工作流程如下:
1. 开发或运维将部署配置提交到 Git 仓库 2. ArgoCD 监听 Git 仓库中的分支、目录或版本变化 3. Repo Server 拉取配置并生成目标清单 4. Application Controller 获取集群当前资源状态 5. ArgoCD 对比 Git 期望状态与集群实际状态 6. 如果发现差异,则将应用状态标记为 OutOfSync 7. 在手动同步或自动同步模式下,将最新配置下发到 Kubernetes 8. 同步完成后状态变为 Synced;如启用 Self Heal,还可以自动修复人为改动
五、ArgoCD 最佳实践
1. 环境准备
- 准备一个可用的 Kubernetes 集群
- 准备一个用于存放部署清单的 Git 仓库
- 保证集群节点可以拉取镜像,且运维主机具备
kubectl访问权限
- 建议提前准备 Ingress 或 NodePort 方式访问 ArgoCD UI
2. 安装 ArgoCD
- 执行以下命令安装:
- https://argo-cd.readthedocs.io/en/stable/getting_started/?utm_source=chatgpt.com

#创建命名空间
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
kubectl get pods -n argocd
kubectl get svc -n argocd注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
kubectl patch svc argocd-server -n argocd -p '{"spec":{"type":"NodePort"}}'
kubectl get svc argocd-server -n argocd
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argocd-server NodePort 10.105.189.170 <none> 80:32711/TCP,443:30559/TCP 41m注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
3. 获取管理员密码并登录
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d命令作用:
- 执行 kubectl 的
-n子命令;请以命令中写出的资源类型、资源名、命名空间和选项确定实际影响范围。
执行结果:
- 成功后应以该命令实际输出、生成的文件或目标服务状态为准;失败时先阅读终端报错,再核对命令参数和运行环境。
关键参数:
| 参数 | 说明 | |
|---|---|---|
-n | 普通 | 指定 Kubernetes 命名空间 argocd,命令只在该命名空间内查找或修改资源。 |
-o | 普通 | 指定输出格式,后面的 jsonpath={.data.password} 决定显示为表格、YAML、JSON 或自定义列。 |
jsonpath={.data.password} | 普通 | kubectl 输出格式 jsonpath={.data.password};例如 yaml 适合查看完整资源定义,json 适合脚本处理。 |
-d | 核心 | -d 的含义取决于当前命令,需要结合主命令判断,不能直接理解成后台运行。 |
注意事项:
k8s-app-config/ dev/ test/ prod/

注意事项:
**注意事项:**








data: registries.conf: | registries: metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"argocd-image-updater-config","app.kubernetes.io/part-of":"argocd-image-updater-controller"},"name":"argocd-image-updater-config","namespace":"argocd"}} labels:
#创建gitlab仓库登录秘钥
**注意事项:**
metadata:
spec:
commonUpdateSettings:
writeBackConfig:
gitConfig:
applicationRefs:
images:注意事项: