首页/AI/大模型部署与运维速查/Kubernetes 部署推理服务要点
部署形态与选型43 条

Kubernetes 部署推理服务要点

K8s 上跑推理服务的三件事:安装 NVIDIA device plugin 暴露 nvidia.com/gpu 资源、在 Pod 里申请 GPU、给推理服务配就绪探针与优雅退出。

K8s 部署推理服务要点

在 Kubernetes 上跑 GPU 推理服务要处理三件事:节点侧通过 NVIDIA device plugin 把 GPU 暴露成可分配资源、Pod 里按不可压缩资源的方式申请 GPU、给推理服务配好就绪探针与优雅退出。模型加载耗时长的服务尤其要处理探针的初始延迟,否则 Pod 会在启动期间被反复重启。

基本信息

资源名nvidia.com/gpu(由 device plugin 注册)
申请位置写在 limits 中,属不可压缩资源
就绪探针决定 Pod 何时接入流量,初始延迟要覆盖模型加载时间
存活探针决定是否重启容器,阈值过紧会在加载期误杀
优雅退出terminationGracePeriodSeconds 要给正在生成的请求留时间

典型使用场景

  • 新集群接入 GPU:安装 device plugin 后确认资源出现在节点可分配容量里
  • 排查 Pod 一直 Pending:多为 GPU 资源不可调度或数量不足
  • 调整探针参数:避免模型加载期间 Pod 被判定失败并反复重启
  • 滚动更新:配合优雅退出与就绪探针,让流量平滑切换
  • 多副本扩容:副本数受节点 GPU 总量限制,扩容前先确认可分配余量

Pod 资源声明(节选)

Pod 资源声明(节选)
spec:
  terminationGracePeriodSeconds: 60        # 给正在生成的请求留退出时间
  containers:
    - name: vllm
      image: vllm/vllm-openai:<版本>
      args: ["--model", "/models/<模型>"]
      resources:
        limits:
          nvidia.com/gpu: "1"              # 不可压缩资源,必须写在 limits
      readinessProbe:
        httpGet: { path: /health, port: 8000 }
        initialDelaySeconds: 120           # 覆盖模型加载耗时
        periodSeconds: 10

排查 GPU 不可调度

排查 GPU 不可调度
# 节点可分配资源里有没有 GPU
kubectl get node <节点名> -o json | jq '.status.allocatable["nvidia.com/gpu"]'

# 看调度失败原因(Insufficient nvidia.com/gpu 等)
kubectl describe pod <pod> | tail -20

# 确认 device plugin 组件是否正常
kubectl get pods -A | grep -i device-plugin

参数与坑的对应

配置项作用设错的后果
GPU 资源申请声明需要的卡数只写 requests 或写小数都不生效
就绪初始延迟等模型加载完成过早接流量,请求大量失败
存活探针阈值判断进程是否健康加载期被重启,陷入崩溃循环
优雅退出时间等待在途请求结束滚动更新时请求被直接掐断
模型加载耗时长的服务要给足初始延迟:探针在加载期间就判定失败时,Pod 会被反复重启,日志看起来像服务崩溃,实际是探针参数问题。
只有驱动与 device plugin 都就绪,节点才会在可分配资源里暴露 GPU;否则 Pod 会长时间等待资源,表现为调度失败而不是启动失败。

易错点

  • limits 里写小数形式的 GPU:GPU 不可切分,需要共享时应改用 MIG 或多实例方案
  • 只在 requests 里写 GPU:扩展资源不会生效,Pod 可能拿不到卡
  • 就绪与存活探针时间设得太紧:模型加载中被重启,陷入崩溃循环
  • 忽略优雅退出时长:滚动更新时正在生成的请求被直接掐断,用户看到断流

数据来源与参考

  • Kubernetes 官方文档(kubernetes.io)
  • NVIDIA GPU Operator 文档(docs.nvidia.com/datacenter/cloud-native)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌