《ArgoCD 部署 Nginx 的两种方式:Git 仓库模式 VS 命令行直连模式(踩坑实录)》

📅 发布时间:2026/7/10 12:34:45
《ArgoCD 部署 Nginx 的两种方式:Git 仓库模式 VS 命令行直连模式(踩坑实录)》 一、前言作为一款 GitOps 持续交付工具ArgoCD 的核心逻辑是“Git 仓库即事实来源”。但在实际学习和测试过程中很多初学者包括我自己都会遇到一个问题手头没有现成的 Git 仓库怎么办于是我开始研究 ArgoCD 的两种部署方式标准模式在 ArgoCD 中添加 Git 仓库链接自动拉取 YAML。纯命令行模式不依赖任何 Git 仓库直接通过kubectl apply -f提交 Application 资源。本文将详细记录这两种方式的实操步骤及各自容易踩的坑。二、标准模式添加 Git 仓库链接标准 GitOps这是 ArgoCD 设计的初衷也是生产环境最推荐的方式。2.1 准备 Git 仓库你需要一个 GitHub/GitLab/Gitea 仓库里面存放 Nginx 的deployment.yaml和service.yaml。2.2 在 ArgoCD 中添加 Git 仓库需要配置 SSH 私钥核心报错难点实战踩坑如果你直接配置了 Git 地址但没有给 ArgoCD 提供 SSH 私钥你会在 ArgoCD 界面或日志中看到一条非常经典的报错Failed to load target state: error creating SSH agent: SSH agent requested but SSH_AUTH_SOCK not-specified如何修复这个报错# 1. 把 ~/.ssh/id_rsa 以 Secret 形式注入 ArgoCD kubectl create secret generic argocd-repo \ --namespace argocd \ --from-filesshPrivateKey~/.ssh/id_rsa # 2. 给 Secret 打上 ArgoCD 专用标签 kubectl label secret argocd-repo \ --namespace argocd \ argocd.argoproj.io/secret-typerepo-creds # 3. 重启 ArgoCD 组件 kubectl rollout restart -n argocd deployment argocd-server kubectl rollout restart -n argocd deployment argocd-repo-server优点配置好之后只要 Git 仓库里的文件发生变化ArgoCD 就能自动同步到 K8s 集群。缺点门槛较高需要配置 SSH 密钥和仓库权限。三、命令行直连模式不通过 Git直接提交 YAML这是我在没有准备 Git 仓库时的应急玩法。3.1 直接创建 Application CRD 资源我们不需要从 Git 拉取而是直接告诉 ArgoCD“请把下面这段 YAML 定义的 Nginx 部署到我的集群里。”yaml# 创建 nginx 的 Deployment 应用 cat argocd-nginx-deploy.yaml EOF apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: nginx-deploy namespace: argocd spec: destination: namespace: default server: https://kubernetes.default.svc project: default source: # 注意这里我们不写 Git 地址而是指向一个占位符 path: placeholder repoURL: https://kubernetes.default.svc targetRevision: HEAD EOF # 提交到集群 kubectl apply -f argocd-nginx-deploy.yaml3.2 这个方式遇到的一个大坑多文档 YAML 报错如果你想把 Deployment 和 Service 写在一个 Application 里ArgoCD 会直接给你一个红色的报错textUnable to validate changes: expected a single document in the stream这怎么办解法拆分成两个 Application 分别创建。bash# 分别创建 Deployment 和 Service 的 Application kubectl apply -f argocd-nginx-deploy.yaml kubectl apply -f argocd-nginx-svc.yaml优点启动极快完全不需要配置 Git 仓库和 SSH 密钥适合快速体验。缺点无法实现自动同步因为 ArgoCD 不知道你什么时候修改了代码只能作为一个“可视化仪表盘”来使用。四、两种方式的最终对比总结维度Git 仓库模式标准命令行直连模式纯YAML是否需要 Git 仓库✅ 必须要有❌ 不需要是否需要 SSH 密钥✅ 必须配置❌ 不需要能否自动同步✅ 可以自动检测并同步❌ 无法自动同步适用场景生产环境、多人协作快速测试、临时纳管应用部署门槛较高极低五、结语ArgoCD 的两种方式对应着两种截然不同的运维思维Git 仓库模式是“声明式”的最佳实践你只需要关心 Git 仓库里的 YAML 文件改没改。命令行直连模式是“指令式”的应急手段适合没有环境、或者想快速验证场景。在我构建 AIOps 平台的初期我先用命令行直连模式跑通了 ArgoCD 的对接流程熟悉了它的资源结构随后才搭建本地 Git 仓库真正走向了Git 仓库模式。希望这篇双模式对比的经验能给你在 GitOps 的学习路上提供参考。