AI服务器GitOps配置:用Argo CD把GPU推理发布管起来
在AI服务器上做GitOps配置,目标不是再装一套发布工具,而是让推理服务的镜像版本、资源配额和副本数都以Git仓库为准,集群状态偏离时能被自动纠正。
这套做法适合已经用Kubernetes跑模型服务、希望发布过程可追溯的团队;
如果推理服务还直接跑在Docker单机上,先完成容器化再考虑GitOps会更顺。
先确认集群和GPU基础可用
GitOps管的是声明式资源,前提是集群本身能调度GPU。
登录AI服务器后先检查节点和GPU插件状态:
kubectl get nodes
kubectl get pods -n kube-system | grep -i nvidia
kubectl describe node | grep -i nvidia.com/gpu
最后一条命令应能看到 nvidia.com/gpu 资源数量。
如果为空,说明NVIDIA device plugin没有正常工作,需要先排查驱动和插件,否则后面创建的推理Pod会一直Pending。
同时准备一个Git仓库,目录按环境分开,例如:
manifests/
base/
inference-deployment.yaml
inference-service.yaml
overlays/
prod/
kustomization.yaml
base放通用清单,overlays按环境覆盖镜像标签和副本数。
仓库不需要很复杂,关键是每次变更都能通过提交记录回溯。
安装Argo CD并暴露访问入口
在能执行kubectl的机器上安装Argo CD:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
等待Pod就绪:
kubectl get pods -n argocd -w
全部Running后,把服务改成NodePort或通过Ingress暴露。
测试环境用端口转发最省事:
kubectl port-forward svc/argocd-server -n argocd 8080:443
初始管理员密码保存在Secret里:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
浏览器访问 https://服务器IP:8080,用 admin 和上面取到的密码登录。
首次登录后建议立即修改密码。
创建Application,把仓库和集群连起来
在Argo CD界面点击 New App,或直接用YAML创建。
关键字段是仓库地址、目标路径和目标命名空间:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: inference-prod
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/your-org/ai-manifests.git
targetRevision: main
path: overlays/prod
destination:
server: https://kubernetes.default.svc
namespace: inference
syncPolicy:
automated:
prune: true
selfHeal: true
prune: true 表示Git里删除的资源会同步删除,selfHeal: true 表示有人手动改集群会被拉回Git状态。
生产环境开启这两个选项前,确认仓库权限和分支保护已经配好,避免误提交直接生效。
创建后执行同步:
kubectl apply -f application.yaml
argocd app sync inference-prod
argocd app get inference-prod
状态显示 Synced 和 Healthy 才算完成。
GPU推理服务要留意的两个坑
第一,资源请求必须写GPU数量,否则调度器不会把它放到GPU节点:
resources:
limits:
nvidia.com/gpu: 1
第二,镜像标签不要用 latest。
GitOps靠Git记录版本,用固定tag或镜像摘要才能保证回滚时拉到同一个镜像。
更新模型时改overlays里的tag并提交,Argo CD检测到差异后自动同步;
回滚就是把提交revert。
另外,
如果推理服务启动慢,
Deployment的就绪探针超时会导致同步后短暂不可用,
建议把 initialDelaySeconds 调大,
并在Git里保留上一版本清单,
方便快速对比。
验证同步是否真正生效
改一次副本数提交到仓库,观察Argo CD是否自动更新:
kubectl get deploy -n inference -w
argocd app history inference-prod
副本数变化且 argocd app get 显示最新提交哈希,说明GitOps链路通了。
再手动删除一个Pod,确认 selfHeal 会重建,资源回到Git声明的状态。
如果同步报错,优先看 argocd app get 的 Conditions 和事件,常见原因是仓库认证失败、路径下没有kustomization.yaml,或目标命名空间不存在。
命名空间可以提前创建,也可以在Application里加 CreateNamespace=true。
走到这一步,AI服务器上的推理发布就不再依赖手动kubectl,版本变更、回滚和漂移修复都有Git记录可查。
先在小环境跑通这条链路,再扩展到多节点推理集群,风险更可控。