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 创建步骤

  1. 登录 Argo CD UI,点击 + New App 按钮。
  2. 填写 GENERAL 部分:
    • Application Name:guestbook-ui
    • Project:default
    • Sync Policy:选择 Automatic 或 Manual
  3. 填写 SOURCE 部分:
    • Repository URL:https://github.com/argoproj/argocd-example-apps.git
    • Path:guestbook
    • Target Revision:HEAD(或指定分支/tag)
  4. 填写 DESTINATION 部分:
    • Cluster URL:https://kubernetes.default.svc
    • Namespace:default
  5. 点击 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 修改同步策略

  1. 进入 Application 详情页,点击 APP DETAILS 标签。
  2. 在 SYNC POLICY 区域点击 EDIT。
  3. 勾选或取消 Enable Auto-Sync、Prune Resources、Self Heal。
  4. 点击 SAVE 生效。
💡 推荐实践:在非生产环境使用 Automated + Prune + Self-Heal,确保 Git 是唯一真实来源;生产环境建议使用 Manual 或 Automated + Prune(无 Self-Heal),保留人工干预空间。

4.5 Application 创建与同步流程总览

下图展示了从 CLI/UI 创建 Application 到首次同步完成的完整数据流,以及同步策略如何影响自动/手动触发。

Application 创建与同步流程 Application 创建与同步流程 argocd app create UI + New App Application CR(Custom Resource) 存储于 Argo CD 的命名空间(argocd) 同步策略判断 Automated / Manual 自动同步(Automated) 检测 Git 新 commit 自动触发 手动同步(Manual) 用户点击 Sync 或 CLI 触发 同步执行(Sync) 对比 Git 状态 → 应用变更 Health: Healthy / Sync: Synced

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、自动化、批量操作 临时调试、教学演示、团队协作

4.8 本章小结