AI 基础设施上生产前,Kubernetes 这几道边界必须收紧
AI 平台从 demo 走到生产,最大的变化不是多几张 GPU,而是多租户。多个团队共享昂贵设备,跑不同镜像,读不同数据,调用不同模型。这个时候,Kubernetes 默认的软边界不够。
GPU 集群的安全问题比普通集群更麻烦。因为容器需要访问设备、驱动、共享内核、可能还要访问高速网络和本地缓存。你既要给性能开门,又要把越权路径关上。
节点池先分清楚
不要把所有 GPU 节点放进一个池子。至少按用途拆:
| 节点池 | 边界 |
|---|---|
| production inference | 高优先级、严格镜像、稳定驱动 |
| training | 支持大任务、checkpoint、RDMA |
| notebook/dev | time-slicing/MIG、低优先级、强限制 |
| batch/offline | 可抢占、可中断 |
节点池拆开后,配合 taints/tolerations、node affinity、Kueue ResourceFlavor,让 workload 很难跑错地方。不要让用户自己记应该选哪个节点。
RuntimeClass 和 privileged 要管住
GPU Pod 需要访问设备,但不等于需要 privileged。生产环境应该限制:
- 禁止默认 privileged;
- 限制 hostPath;
- 限制 hostNetwork;
- 明确 RuntimeClass;
- 禁止随意挂载
/dev; - 禁止用户改动底层 driver 目录。
可以用 Pod Security Admission、OPA Gatekeeper、Kyverno 或自研 admission webhook 做策略。重点是让 GPU 权限最小化。
镜像链路要可信
AI 镜像经常很大,也经常包含第三方包、模型转换脚本、CUDA 扩展。供应链要管:
- 私有 registry;
- 镜像签名;
- SBOM;
- 漏洞扫描;
- 基础镜像白名单;
- CUDA/NCCL/PyTorch 版本基线。
不要让用户随便从公网拉训练镜像跑在有企业数据的 GPU 节点上。尤其是 Notebook 场景,最容易把“临时实验”变成长期风险。
Secret 和模型权重要分级
模型权重本身可能是资产,数据集更是敏感资产。平台要区分:
- API key;
- 对象存储凭证;
- 模型权重访问权限;
- 数据集访问权限;
- 推理租户 token。
训练任务的 service account 不应该默认能读所有模型和所有数据。推理服务也不应该把上游 API key 写进镜像。Secret 挂载要最小化,最好用短期凭证和审计。
DRA 和 Device Plugin 的 RBAC
如果集群使用 DRA,要特别注意 ResourceClaim、DeviceClass、ResourceSlice 的访问权限。普通租户不应看到不属于自己的设备细节,也不应能创建 admin access 级别的 claim。
Device Plugin 时代也要管节点标签。用户如果能随便改 nodeSelector 或 toleration,可能绕过资源池策略。准入层要校验:某个 namespace 只能使用被授权的 GPU flavor。
网络边界
训练任务可能需要高性能网络,但不是所有 Pod 都应该访问所有网络。
实践上可以分层:
- 在线推理只暴露 gateway 入口;
- 训练 namespace 访问数据存储和 checkpoint;
- Notebook 默认禁止访问生产服务;
- RDMA/hostNetwork 只给受控任务;
- egress 做审计和限制。
多租户环境里,网络策略比很多人想象得重要。一个能访问对象存储和内部模型 registry 的 Notebook,风险不比生产服务小。
Runbook 要写到任务级
生产平台一定会遇到这些事故:
- 某张 GPU XID 反复报错;
- 某个训练任务 NCCL hang;
- 推理服务 P99 突增;
- 模型发布后显存超限;
- checkpoint 恢复失败;
- 队列被低优先级任务占满。
每类事故要有明确动作:谁能 cordon 节点,谁能驱逐任务,什么情况下可以抢占,哪些指标要保留,checkpoint 怎么恢复。不要等故障时让值班同学读源码。
上生产的最低检查表
| 项目 | 必须回答 |
|---|---|
| 资源 | 谁能申请哪种 GPU,最多多少 |
| 调度 | 是否有队列、优先级、抢占边界 |
| 隔离 | MIG/time-slicing/整卡策略是否清楚 |
| 镜像 | 是否有签名、扫描、基线 |
| 数据 | 数据集和模型权重是否分权 |
| 指标 | DCGM、token、step、队列指标是否齐全 |
| 恢复 | checkpoint、重试、回滚是否演练 |
| 安全 | RBAC、NetworkPolicy、Pod Security 是否生效 |
GPU 集群的生产化不是把 demo 服务稳定运行一周。它要在多团队、多模型、多任务同时存在时,仍然能保证边界、成本和恢复路径。