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 对比

维度JenkinsArgo 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 argocd

2、访问 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 -d

3、创建 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: 80

4、定义 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: true
prune: true 表示仓库中删除的资源会同步从集群清理;selfHeal: true 表示集群被手动改动后会自动恢复成 Git 中的期望状态。

5、应用 YAML 文件

kubectl apply -f argo-nginx-app.yaml

6、验证部署

回到 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)是目前的主流实践

标签: none

添加新评论