4. 创建第一个 Application:通过 CLI 和 UI 部署示例应用、同步策略配置
本章是 GitOps 工作流的第一个实操里程碑。你将通过 argocd CLI 和 Argo CD UI 两种方式创建第一个 Application,将一个示例 Nginx 应用部署到目标集群,并配置同步策略来控制自动/手动同步行为。完成本章后,你将掌握 Application 的完整生命周期——从定义、创建到首次同步。
4.1 准备工作:示例应用仓库与集群凭证
在创建 Application 之前,确保以下前置条件已满足:
- Git 仓库:包含 Kubernetes 清单文件(如 Deployment + Service),推荐使用
https://github.com/argoproj/argocd-example-apps中的guestbook示例。 - 目标集群:已在 Argo CD 中注册(
argocd cluster list确认状态为Successful)。 - CLI 登录:已通过
argocd login <server>完成身份认证。
💡 推荐仓库结构:将 Kubernetes 清单放在
kustomize/ 或 manifests/ 目录下,避免根目录文件混乱。Argo CD 支持直接引用子目录作为 Application 的 path。
4.2 方式一:通过 CLI 创建 Application
CLI 方式适合自动化脚本、CI/CD 管道或习惯终端的用户。核心命令是 argocd app create,需要指定应用名称、仓库 URL、目标路径、集群和目标命名空间。
4.2.1 创建命令示例
argocd app create guestbook \
--repo https://github.com/argoproj/argocd-example-apps.git \
--path guestbook \
--dest-server https://kubernetes.default.svc \
--dest-namespace default \
--sync-policy automated \
--auto-prune \
--self-heal
| 参数 | 说明 | 示例值 |
|---|---|---|
--repo |
Git 仓库 URL | https://github.com/argoproj/argocd-example-apps.git |
--path |
仓库内清单文件所在目录 | guestbook |
--dest-server |
目标集群 API Server 地址 | https://kubernetes.default.svc(当前集群) |
--dest-namespace |
部署的目标命名空间 | default |
--sync-policy |
同步策略(automated / manual) | automated |
--auto-prune |
自动清理 Git 中已删除的资源 | (无值,布尔标志) |
--self-heal |
自动修复集群中偏离 Git 状态的资源 | (无值,布尔标志) |
4.2.2 验证创建结果
argocd app get guestbook
输出应显示 Health Status: Healthy 和 Sync Status: Synced。如果启用了自动同步,Argo CD 会在几秒内自动执行首次同步。
🔑 关键检查点:
argocd app list 可查看所有 Application 的状态;argocd app sync guestbook 可手动触发同步(即使配置了自动策略也可手动干预)。
4.3 方式二:通过 UI 创建 Application
UI 方式适合可视化操作、团队协作或快速原型验证。Argo CD 的 Web 界面提供了表单式创建向导,降低学习门槛。
4.3.1 创建步骤
- 登录 Argo CD UI,点击 + New App 按钮。
- 填写 GENERAL 部分:
- Application Name:
guestbook-ui - Project:
default - Sync Policy:选择
Automatic或Manual
- Application Name:
- 填写 SOURCE 部分:
- Repository URL:
https://github.com/argoproj/argocd-example-apps.git - Path:
guestbook - Target Revision:
HEAD(或指定分支/tag)
- Repository URL:
- 填写 DESTINATION 部分:
- Cluster URL:
https://kubernetes.default.svc - Namespace:
default
- Cluster URL:
- 点击 Create 完成创建。
⚠️ 常见陷阱:UI 创建时如果未勾选 Auto-Create Namespace,且目标命名空间不存在,同步会失败。建议在 DESTINATION 部分勾选该选项,或提前创建命名空间。
4.4 同步策略配置详解
同步策略决定了 Argo CD 如何将 Git 仓库中的期望状态应用到目标集群。策略在创建 Application 时设定,也可后续修改。
4.4.1 策略类型对比
| 策略 | 行为 | 适用场景 |
|---|---|---|
| Manual | 仅当用户手动点击 Sync 或调用 argocd app sync 时才执行同步 |
生产环境、需要审批流程、变更窗口控制 |
| Automated | 检测到 Git 仓库变更(新 commit)时自动触发同步 | 开发/测试环境、持续部署流水线 |
| Automated + Prune | 自动同步 + 删除 Git 中已移除的资源 | 需要严格 Git 与集群一致的环境 |
| Automated + Self-Heal | 自动同步 + 自动修复集群中手动修改的资源 | 防止配置漂移、安全合规要求 |
4.4.2 通过 CLI 修改同步策略
# 从 Manual 改为 Automated(带 prune 和 self-heal)
argocd app set guestbook \
--sync-policy automated \
--auto-prune \
--self-heal
# 禁用自动同步,回到 Manual
argocd app set guestbook --sync-policy manual
4.4.3 通过 UI 修改同步策略
- 进入 Application 详情页,点击 APP DETAILS 标签。
- 在 SYNC POLICY 区域点击 EDIT。
- 勾选或取消 Enable Auto-Sync、Prune Resources、Self Heal。
- 点击 SAVE 生效。
💡 推荐实践:在非生产环境使用 Automated + Prune + Self-Heal,确保 Git 是唯一真实来源;生产环境建议使用 Manual 或 Automated + Prune(无 Self-Heal),保留人工干预空间。
4.5 Application 创建与同步流程总览
下图展示了从 CLI/UI 创建 Application 到首次同步完成的完整数据流,以及同步策略如何影响自动/手动触发。
4.6 验证部署结果
无论使用 CLI 还是 UI,创建并同步成功后,通过以下方式验证:
- CLI:
argocd app get guestbook查看SYNC STATUS和HEALTH STATUS。 - UI:Application 详情页的 SYNC STATUS 显示
Synced,HEALTH STATUS 显示Healthy。 - Kubernetes:
kubectl get pods -n default确认 Pod 处于Running状态。
📌 排障提示:如果同步后状态为
OutOfSync,检查 Git 仓库路径是否正确、清单文件语法是否合法、目标命名空间是否存在。使用 argocd app sync guestbook --dry-run 可预览变更而不实际执行。
4.7 CLI 与 UI 创建方式对比
| 维度 | CLI | UI |
|---|---|---|
| 操作速度 | 快(单条命令) | 慢(需填写表单) |
| 可脚本化 | ✅ 完全支持 | ❌ 不支持 |
| 可视化反馈 | 文本输出 | ✅ 实时拓扑图 + 状态 |
| 参数完整性 | ✅ 支持所有参数 | 部分高级参数需 YAML 编辑 |
| 学习曲线 | 需记忆命令 | ✅ 直观易用 |
| 适合场景 | CI/CD、自动化、批量操作 | 临时调试、教学演示、团队协作 |