ArgoCD容器持续交付AI中转服务实战教程
适用场景与目标读者
如果你正在维护一个AI中转服务(例如将用户请求转发到OpenAI或国内大模型API的代理层),并且希望用GitOps的方式自动化容器部署,这篇文章正好适合你。
本文不要求你精通Kubernetes,只要能装Docker、会用命令行就行。
读完你就能用ArgoCD实现代码一推,应用自动更新的效果。
---
准备清单:你需要什么
- 一个可用的Kubernetes集群(Minikube或生产环境均可)
- kubectl 已配置好并能连接到集群
- 一个Git仓库(GitHub、GitLab等),用于存放AI中转服务的K8s清单或Helm Chart
- 一个基础的AI中转服务Docker镜像(比如基于Nginx或Envoy的代理,可以自己构建或使用公共镜像)
- 对ArgoCD的基本概念有初步了解(不是必需,但建议先看一遍官方简介)
注意:如果还没有AI中转服务的镜像,可以先拿一个简单的Nginx反向代理示例来练习,后续再把真实服务替换进去。
---
第一步:安装ArgoCD到集群
在Kubernetes集群中创建命名空间并部署ArgoCD:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
等待Pod全部运行(约1-2分钟):
kubectl wait --for=condition=Ready pods --all -n argocd --timeout=300s
安装ArgoCD CLI(方便后续操作):
- Linux/Mac:
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 && chmod +x /usr/local/bin/argocd - Windows:下载exe并加入PATH
获取初始管理员密码:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
ArgoCD Server默认是ClusterIP,为了本地访问,将其端口转发到本地:
kubectl port-forward svc/argocd-server -n argocd 8080:443 &
打开浏览器访问 https://localhost:8080,使用 admin 和上面获取的密码登录。
---
第二步:准备AI中转服务的K8s清单
假设你的AI中转服务是一个Nginx反向代理,通过环境变量配置目标API地址。
创建一个Git仓库,在根目录下放一个 deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ai-proxy
spec:
replicas: 2
selector:
matchLabels:
app: ai-proxy
template:
metadata:
labels:
app: ai-proxy
spec:
containers:
- name: proxy
image: your-docker-registry/ai-proxy:latest # 替换为你的镜像
ports:
- containerPort: 80
env:
- name: UPSTREAM_URL
value: "https://api.openai.com" # 示例,根据实际修改
livenessProbe:
httpGet:
path: /health
port: 80
---
apiVersion: v1
kind: Service
metadata:
name: ai-proxy-service
spec:
selector:
app: ai-proxy
ports:
- protocol: TCP
port: 80
targetPort: 80
将代码推送到Git仓库(例如 git push origin main)。
---
第三步:在ArgoCD中创建应用
登录ArgoCD Web UI,点击 + New App,填写:
- Application Name:
ai-proxy(自定义) - Project:
default - Sync Policy:选择 Automatic,开启 Prune Resources 和 Self Heal(这样Git仓库一更新,集群会自动同步)
- Source:选择 Git,填入仓库URL和路径(比如
.或目录名),Branch填main - Destination:Cluster URL选
https://kubernetes.default.svc,Namespace可以新建一个,比如ai-proxy(先创建:kubectl create ns ai-proxy)
填写完成后点击 Create。
几秒后ArgoCD会自动从Git仓库拉取清单并部署到集群。
在Applications页面可以看到同步状态为 Synced。
确认Pod运行:
kubectl get pods -n ai-proxy
如果一切正常,你应该看到两个ai-proxy Pod处于Running状态。
---
避坑指南:新手最容易犯的错误
- Git仓库权限问题:ArgoCD需要能拉取你的私有仓库。建议使用SSH密钥或GitHub Token。在ArgoCD设置中配置Repository Credentials。
- 镜像拉取失败:如果镜像在私有镜像仓库,需要在K8s中创建ImagePullSecret,并在Deployment中引用。
- Helm Chart没有values文件:如果用Helm,确保Chart目录结构正确,
values.yaml已有一个默认值。 - 自动同步未生效:确认Sync Policy中 Automatic 已勾选,并且
Self Heal开启。 - 健康检查失败:AI中转服务/health端点要有响应,否则ArgoCD会一直显示Degraded。
---
效果验证:如何确认持续交付生效
- 修改你的AI中转服务代码,比如更改Nginx配置中的超时时间,重新构建镜像并推送(
your-docker-registry/ai-proxy:latest)。 - 在Git仓库中更新Deployment的镜像标签(比如改为
:v2)并推送。 - 观察ArgoCD Web UI,几秒内会显示 OutOfSync,然后自动同步为 Synced。
- 查看Pod是否滚动更新:
kubectl rollout status deployment/ai-proxy -n ai-proxy
如果滚动成功,说明ArgoCD容器持续交付AI中转服务的流程已经跑通。
---
常见问题FAQ
Q:ArgoCD部署后应用状态一直Missing?
A:通常是由于Git仓库URL或路径写错,或没有正确配置认证。检查ArgoCD中Repository连接测试是否能通过。
Q:AI中转服务的配置如何动态更新?
A:建议使用ConfigMap或Secret,在Git仓库中更新ConfigMap的YAML文件,ArgoCD会自动同步并重启Pod(如果Deployment挂载了该ConfigMap)。
Q:我不想每次修改都手动改镜像标签,有什么好办法?
A:可以结合CI/CD流水线(如GitHub Actions)在代码合并后自动构建新镜像并更新Git仓库中的tag,实现完全自动化。
---
如果你正在处理ArgoCD容器持续交付AI中转服务的实际部署,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。