Cursor + GitOps:自动化运维新姿势,一个人也能管几十台服务器
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 仓库结构
1 创建 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)
2 安装 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
3 获取 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 仓库关联起来。
1 在 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 验证后再开启。
2 提交到 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 实践。
更多推荐


所有评论(0)