TL;DR:用 Cursor 的 AI 能力写 GitOps 配置,用 Git 仓库作为唯一真相源,用 Argo CD 自动同步到服务器。整个流程:改代码 → Push → 自动部署——不需要 SSH,不需要手动操作服务器。

1. 先说个真实的场景

以前运维团队管服务器,流程是这样的:

  • 开发说「服务该上线了」,丢过来一个压缩包
  • 运维连上服务器,scp 传文件,解压,配环境变量
  • 改个配置要登三台服务器,每台改法还不完全一样
  • 出事了回滚,先问「上次是哪个版本来着」

这个流程有几个致命问题:

  • 不可追溯——没有人知道「当前服务器上跑的是什么版本的代码」
  • 不可重复——「在我机器上能跑」但「在服务器上不行」
  • 不可协作——多人改同一台服务器,不知道谁改了什么

GitOps 解决的就是这三个问题。它把 Git 仓库变成唯一的真相源——服务器上应该跑什么,Git 说了算,而不是 SSH 进去手动改。

而 Cursor 的作用是:让写 GitOps 配置这件事,从「查文档改模板」变成「说出你想要什么,Cursor 帮你生成」

2. GitOps 是什么?

GitOps 不是什么新概念,原理很简单:

你把期望的基础设施状态以代码的形式写在 Git 仓库里,一个自动化工具(Argo CD / Flux)持续盯着这个仓库,一旦发现仓库里的状态和服务器上实际的状态不一致,就自动把服务器同步成仓库里描述的样子。

类比一下:

  • 传统运维 = 你手动把衣服叠好放到柜子里(可能放错、放乱)
  • GitOps = 你写了一张「衣柜配置单」,有个人 24 小时盯着这张单子,一旦衣柜和单子不一样就自动改过来

核心工具是 Argo CD(Kubernetes 场景)或者类似的开源工具。不管用什么工具,GitOps 核心原则不变:

  • 声明式:你描述「我要什么」,不是「我要做什么」
  • 版本控制:每一次变更都是一次 Git commit,可追溯、可回滚
  • 自动同步:Git 变了我就自动同步,不需要人工干预

3. Cursor 在 GitOps 里的角色

Cursor 本身不是 GitOps 工具,它的作用是 让写 GitOps 配置变得极快

GitOps 配置通常是 YAML 文件,Kubernetes 场景下需要写 Deployment、Service、ConfigMap、Ingress、Secret……每个资源的字段少则十几个、多则几十个。纯手写费时费力,查文档又容易出错。

Cursor 的 Composer 模式可以直接用自然语言生成配置,比如你可以说:

在 Cursor Composer 里输入

帮我写一个 Nginx Deployment 的 YAML 配置:
- 副本数 2
- 镜像 nginx:1.25
- 端口 80
- 内存限制 256Mi,CPU 限制 500m
- 配置健康检查 /health 路径
- 用 ConfigMap 挂载 nginx.conf

Cursor 会生成一个完整的 YAML 文件,你检查一遍、修改细节,然后提交到 Git 仓库。Argo CD 检测到变更,自动同步到集群。

整个流程变成了:说需求 → Cursor 生成 → 提交 Git → 自动部署

4. 完整实操:从零搭建 Cursor + GitOps 工作流

4.1 整体架构

GitHub 仓库(存放所有 YAML 配置)

↓(Webhook 通知)

Argo CD(持续监听 Git 仓库)

↓(自动同步)

Kubernetes 集群(实际运行的服务器)

Cursor(本地编辑器,用来写 YAML + 提交 Git)

4.2 准备工作

你需要准备:

  • 一个 Kubernetes 集群(本地用 Minikube,或者云上 EKS/GKE/ACK)
  • GitHub 仓库(公开私有都行)
  • Cursor 编辑器(或其他 IDE,但 Cursor 的 AI 能力最强)
  • kubectl 已配置好集群访问

4.3 Step 1:初始化 GitOps 仓库结构

创建 Git 仓库并初始化目录结构

bash

# 创建仓库结构
mkdir my-gitops && cd my-gitops
git init

# 标准 GitOps 目录结构
mkdir -p apps/nginx
mkdir -p apps/backend-api
mkdir -p apps/frontend
mkdir -p infra/cert-manager
mkdir -p infra/ingress-nginx
mkdir -p clusters/production
mkdir -p clusters/staging

目录结构说明:

  • apps/ —— 每个应用一个子目录
  • infra/ —— 基础设施组件(Nginx Ingress、Cert-Manager 等)
  • clusters/ —— 不同环境的配置(production / staging)

安装 Argo CD

bash

# 安装 Argo CD(Kubernetes 必须先装)
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# 等待 Argo CD 所有 Pod 运行起来
kubectl get pods -n argocd -w

获取 Argo CD 登录密码并暴露 UI

bash

# 获取初始密码(用户名是 admin)
kubectl -n argocd get secret argocd-initial-admin-secret \\
  -o jsonpath="{.data.password}" | base64 -d

# 通过 NodePort 暴露 Argo CD UI(生产环境建议用 Ingress)
kubectl patch svc argocd-server -n argocd -p '{"spec":{"type":"NodePort"}}'

4.4 Step 2:用 Cursor 生成第一个应用配置

打开 Cursor,在 apps/nginx/ 目录下创建文件。

你不需要手写——直接用 Cursor 的 Composer 模式,让它生成。

Cursor Composer 输入

生成一个完整的 Nginx Deployment + Service YAML 配置:
- 应用名:nginx-web
- 命名空间:default
- 副本数:2
- 镜像:nginx:1.25-alpine
- 容器端口:80
- Service 类型:ClusterIP
- 资源配置:CPU 100m / 内存 128Mi
- 配置一个 /health 的 HTTP 存活探针
- 挂载一个 ConfigMap,里面是自定义的 nginx.conf

Cursor 生成的内容大概是这个样子:

apps/nginx/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-web
  namespace: default
  labels:
    app: nginx-web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-web
  template:
    metadata:
      labels:
        app: nginx-web
    spec:
      containers:
        - name: nginx
          image: nginx:1.25-alpine
          ports:
            - containerPort: 80
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
          livenessProbe:
            httpGet:
              path: /health
              port: 80
            initialDelaySeconds: 10
            periodSeconds: 5
          volumeMounts:
            - name: nginx-config
              mountPath: /etc/nginx/conf.d
      volumes:
        - name: nginx-config
          configMap:
            name: nginx-web-config
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-web-config
  namespace: default
data:
  default.conf: |
    server {
        listen 80;
        location /health {
            return 200 'healthy';
            add_header Content-Type text/plain;
        }
    }
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-web-svc
  namespace: default
spec:
  selector:
    app: nginx-web
  ports:
    - port: 80
      targetPort: 80

4.5 Step 3:配置 Argo CD 指向 Git 仓库

有了 YAML 文件,下一步是把 Argo CD 和 Git 仓库关联起来。

在 Argo CD 里创建 Application

Application 是 Argo CD 的核心概念——一个 Application 对应 Git 仓库里的一个应用。

apps/nginx/application.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: nginx-web
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/yourname/my-gitops.git
    targetRevision: HEAD
    path: apps/nginx
  destination:
    server: https://kubernetes.default.svc
    namespace: default
  syncPolicy:
    automated:
      prune: true        # 自动删除 Git 里没有的资源
      selfHeal: true     # 自动修复和 Git 不一致的配置
      allowEmpty: false

⚠️ 注意:`automated` 字段设为 `true` 后,Argo CD 会自动同步。任何 push 到 main 分支的变更都会直接部署到生产环境。建议先在 staging 环境关闭 automated,用 manual sync 验证后再开启。

提交到 Git,Argo CD 自动检测并同步

bash

cd my-gitops
git add .
git commit -m "feat: add nginx-web deployment"
git remote add origin https://github.com/yourname/my-gitops.git
git push -u origin main

现在 Argo CD 的 UI 里,你应该能看到 nginx-web 应用从 OutOfSync 变成 Synced。

4.6 Step 4:用 Cursor 管理多环境配置

真实场景一般有多个环境:staging、production。多环境管理的最佳实践是用 Kustomize 或 Helm。这里用 Kustomize(更轻量,Cursor 生成起来更简单)。

Cursor Composer 输入

为 nginx-web 应用生成 Kustomize 多环境配置:
- base/ 目录放公共配置(deployment.yaml, service.yaml)
- overlays/staging/ 目录:副本数 1,镜像 tag 用 :stable
- overlays/production/ 目录:副本数 3,镜像 tag 用 :latest,配置 HPA 自动扩缩容

每个目录需要有 kustomization.yaml

Cursor 生成的目录结构:

最终目录结构

apps/nginx/
├── base/
│   ├── deployment.yaml
│   ├── service.yaml
│   └── kustomization.yaml
├── overlays/
│   ├── staging/
│   │   ├── kustomization.yaml   # 副本数: 1, tag: stable
│   │   └── config.yaml
│   └── production/
│       ├── kustomization.yaml   # 副本数: 3, tag: latest
│       ├── config.yaml
│       └── hpa.yaml              # HorizontalPodAutoscaler
└── application.yaml

5. 典型使用场景

场景一:改配置,不用登服务器

比如要把 nginx 的副本数从 2 改成 5:

  • 在 Cursor 里打开 overlays/production/deployment-patch.yaml
  • 让 Cursor 帮你改 replicas: 5
  • 提交 Git,Argo CD 30 秒内自动同步
  • 不需要 SSH,不需要 kubectl apply

场景二:新版本上线,一键回滚

bash

# 查看部署历史(每次变更有 commit message)
git log --oneline

# 回滚到上一个版本
git revert HEAD
git push

# Argo CD 自动同步回滚后的状态

场景三:多服务协同变更,一次提交

假设你改了一个共享 ConfigMap,同时影响了 nginx 和 backend-api 两个服务。传统做法是分别登录两台服务器改配置。

GitOps 做法:

bash

# 一次提交改了三个文件
git add shared-configmap/config.yaml \\
        apps/nginx/overlays/production/config.yaml \\
        apps/backend-api/overlays/production/config.yaml
git commit -m "fix: 更新共享配置,影响 nginx 和 backend-api"
git push

Argo CD 检测到 Git 变更,一次性把三个服务的配置都同步正确了。这就是 GitOps 的原子性——要么全部改成功,要么不改。

6. Cursor + GitOps 工作流全貌

步骤 操作 工具
1 说需求,Cursor 生成 YAML 配置 Cursor Composer
2 检查/修改配置 Cursor Editor
3 提交到 Git 仓库 Git
4 Argo CD 检测到变更 Argo CD
5 自动同步到 Kubernetes 集群 Argo CD Sync
6 出问题了?git revert 回滚 Git
核心理念:你只需要和两样东西打交道——Cursor(写代码)和 Git(管理变更)。服务器本身不需要你登录操作。

7. 常见的坑

  • Argo CD 检测延迟:Argo CD 默认每 3 分钟轮询一次 Git。如果需要更快,用 Webhook 触发立即同步(GitHub 设置 → Webhooks → 指向 Argo CD)
  • Secrets 管理:YAML 里不能直接写明文密码,用 Sealed Secrets 或 Vault 动态注入
  • 生产环境的 automated 要谨慎:建议生产环境用 Argo CD 的 OutOfSync + 手动 Approve 模式,防止误操作

8. 总结

Cursor + GitOps 这个组合,解决的不是「用什么工具部署」的问题,而是「谁来控制服务器」的问题。

传统模式里,服务器状态是「人说了算」——人 SSH 进去改了什么,服务器就变成什么。问题是:人不可靠。

GitOps 模式里,服务器状态是「Git 说了算」——Git 仓库里的配置是什么,服务器就同步成什么。Git 是代码,代码可以被 review、被回滚、被测试。

Cursor 的作用是降低 GitOps 配置的门槛——你不需要记住所有 YAML 字段,你只需要描述你想要什么,它帮你生成。

一个人管几十台服务器,在以前是运维团队的活。现在,一个工程师 + Cursor + Argo CD,能做到。

如果对你有帮助,欢迎在评论区聊聊你的 GitOps 实践。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐