Argo CD Argo CD

使用声明式清单部署你的第一个应用

通过 Application 资源将 Argo CD 指向 Git 仓库,并观察同步过程。

12 min 初级

Argo CD 和集群中的其他组件一样,是通过 Kubernetes 资源来配置的。其中最核心的是 Application:它表示”取这个仓库中这个路径下的清单,并让它们持续应用到这个集群和命名空间”。本指南会创建一个小型配置仓库,用 Application 将其注册,然后修改 Git 来观察同步的发生。本指南假设 Argo CD 已安装,并且你可以登录(参见上一篇指南)。

准备配置仓库

创建一个 Git 仓库(任何 Argo CD 能访问的托管服务均可),目录结构如下:

webapp-config/
├── application.yaml      # the Argo CD Application, applied once by hand
└── dev/
    ├── deployment.yaml
    └── service.yaml

dev/deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
        - name: webapp
          image: nginx:1.25
          ports:
            - containerPort: 80

dev/service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: webapp
spec:
  selector:
    app: webapp
  ports:
    - port: 80
      targetPort: 80

这些清单有意省略了命名空间。Argo CD 会把它们应用到你接下来配置的目标命名空间中。请把 application.yaml 放在被同步的路径(dev/)之外,这样应用就不会试图管理它自己的定义。如果仓库是私有的,请先在 UI 的 Settings → Repositories 下添加凭据。

编写 Application 清单

application.yaml:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: webapp-dev
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/your-org/webapp-config.git
    targetRevision: HEAD
    path: dev
  destination:
    server: https://kubernetes.default.svc
    namespace: webapp
  syncPolicy:
    syncOptions:
      - CreateNamespace=true
    automated:
      prune: true
      selfHeal: true

关键部分说明:

  • source 是期望状态所在的位置:仓库、要跟踪的修订版本(HEAD 表示跟随默认分支)以及仓库内的文件夹。
  • destination 是应用到的位置。https://kubernetes.default.svc 表示”Argo CD 自己所运行的集群”。若要管理外部集群,则需先注册该集群,并改用它的 API 服务器地址。
  • project: default 将应用放入 Argo CD 内置的项目中。项目用于对应用分组,并限制它们可以部署的内容。
  • syncPolicy 开启自动同步,并在命名空间不存在时创建它。prune 和 selfHeal 的作用会在单独的指南中讲解。请对照当前文档检查 apiVersion,因为它是各版本之间最容易变化的字段。

注册应用

提交并推送仓库,然后将清单一次性应用到集群:

kubectl apply -f application.yaml

理想情况下,这是你最后一次对该应用运行 kubectl apply。从此以后,所有变更都通过 Git 完成。

探索资源树

打开 UI。webapp-dev 应用会出现,并在几秒内变为 Synced 和 Healthy。打开它即可看到资源树:Service、Deployment、其背后的 ReplicaSet,以及两个 Pod。选中某个资源会显示它的实时清单、事件,以及(对 Pod 而言)日志,这通常比切换到终端更快。也可以从集群侧确认:

kubectl get all -n webapp

修改 Git,观察同步

编辑仓库中的 dev/deployment.yaml,将镜像标签改为 nginx:1.26,并提交到被跟踪的分支。Argo CD 默认每三分钟轮询一次仓库,因此你可以等待,或者在应用上点击 Refresh 让它立即检查。应用会短暂显示 OutOfSync,随后新的 ReplicaSet 开始滚动发布。验证变更已生效:

kubectl get deploy webapp -n webapp \
  -o jsonpath='{.spec.template.spec.containers[0].image}'; echo

这就是完整的循环:编辑 Git,Argo CD 让集群收敛到该状态。下一篇指南将介绍如何控制这种行为。

热门指南