使用声明式清单部署你的第一个应用
通过 Application 资源将 Argo CD 指向 Git 仓库,并观察同步过程。
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 让集群收敛到该状态。下一篇指南将介绍如何控制这种行为。