ArgoCD入门
Argo CD 是 Kubernetes 生态中最流行的 GitOps 持续交付工具。本文介绍它的核心概念、与 Jenkins 的差异,并手把手演示部署一个 Nginx 服务。
一、什么是 Argo CD?
Argo CD 是一个声明式的 GitOps 持续交付工具,用于 Kubernetes 集群。它通过持续监控 Git 仓库中的 Kubernetes 资源配置文件,将这些配置自动应用到指定的集群中,确保集群的实际状态与仓库中的期望状态保持一致。
Argo CD 支持各种 Kubernetes 清单格式:Kustomize、Helm Charts、Ksonnet、YAML 和 JSON,让你通过 Git 仓库就能管理和部署 Kubernetes 资源。
二、Argo CD 的好处
- 声明式管理:只需在 Git 仓库中定义好应用的期望状态,Argo CD 自动将集群实际状态与之同步,减少人为错误,配置管理更清晰、可审计
- GitOps 工作流:Git 仓库作为唯一真理来源(Source of Truth),每次部署或更新都通过提交代码和合并请求触发,保证自动化与审核跟踪
- 持续同步和自愈:持续监控集群资源状态,检测到偏离期望状态时自动纠正
- 多集群支持:一套 Argo CD 管理多个 Kubernetes 集群,跨集群部署更轻松
- 细粒度访问控制:支持基于角色的访问控制(RBAC)以及 SSO 集成,精确控制项目和应用权限
三、Argo CD 与 Jenkins 对比
| 维度 | Jenkins | Argo CD |
|---|---|---|
| 定位 | CI 引擎,通用的自动化工具 | GitOps CD 工具,K8s 专属 |
| 工作模型 | Push(推)——构建完主动推镜像、推部署 | Pull(拉)——主动从 Git 仓库拉取期望状态,同步到集群 |
| 运行环境 | 任意服务器,不依赖 K8s | 只跑在 K8s 集群里 |
| 配置方式 | Jenkinsfile(Groovy 脚本) | YAML 清单(Application/ApplicationSet) |
| 状态管理 | 无状态,跑完就完 | 持续监控集群状态,偏离就自动修正(自愈) |
| GitOps 支持 | 需插件或自定义脚本实现 | 内置支持,Git 是唯一真理来源 |
| 部署自动化 | 通过流水线手动配置部署过程 | 自动同步资源配置,持续保持集群一致 |
| 可观测性和回滚 | 依赖第三方工具或插件 | 内置监控和自动回滚 |
| 适用场景 | 编译、测试、打包、镜像构建、脚本执行 | K8s 应用部署、多集群同步、蓝绿/金丝雀发布 |
| 插件生态 | 极其丰富,2000+ 插件 | 插件少,专注 K8s GitOps |
| CI/CD 整合 | CI + CD 都支持,整合度较高 | 专注 CD,常与 Argo Workflows 等工具配合完成 CI |
四、实战:使用 Argo CD 部署一个 Nginx 服务
1、安装 Argo CD
在 Kubernetes 集群中安装 Argo CD:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml安装完成后,查看 Argo CD API Server 的服务信息:
kubectl get svc -n argocd2、访问 Argo CD Web 界面
通过 port-forward 暴露 Web 界面:
kubectl port-forward svc/argocd-server -n argocd 8080:443浏览器访问 https://localhost:8080,默认用户名为 admin,初始密码用以下命令获取:
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d3、创建 Git 仓库并推送配置
在 GitHub(或其他 Git 服务)新建仓库,将以下内容保存为 nginx-deployment.yaml 并推送:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 804、定义 Argo CD 应用
创建 argo-nginx-app.yaml:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx-app
namespace: argocd
spec:
project: default
source:
repoURL: '<YOUR_GIT_REPOSITORY_URL>' # 替换为你的 Git 仓库地址
targetRevision: HEAD
path: '<YOUR_APP_PATH>' # 替换为 yaml 文件所在目录
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: trueprune: true表示仓库中删除的资源会同步从集群清理;selfHeal: true表示集群被手动改动后会自动恢复成 Git 中的期望状态。
5、应用 YAML 文件
kubectl apply -f argo-nginx-app.yaml6、验证部署
回到 Argo CD Web 界面,可以看到名为 nginx-app 的应用,状态为 Synced 即部署成功。
也可以在集群中验证 Nginx 是否正常运行:
kubectl get pods -l app=nginx
kubectl get svc nginx-service五、总结
Argo CD 通过 GitOps 工作流,让 Kubernetes 的应用部署和配置管理更透明、可追溯、可自愈。与 Jenkins 等传统 CI/CD 工具相比,它更专注于 Kubernetes 环境的持续交付,尤其适合微服务和容器化应用;而 Jenkins 则在通用 CI 场景(编译、测试、打包)中依然不可替代——两者配合使用(Jenkins 管 CI,Argo CD 管 CD)是目前的主流实践。