Kubernetes中如何为不同工作负载配置多运行时引擎?
为不同K8s工作负载指定不同容器运行时
方案可行性
完全可行。Kubernetes的RuntimeClass特性就是专门用来实现这一需求的:允许不同Pod指定不同的容器运行时,默认工作负载继续使用runc,仅GPU工作负载调用NVIDIA containerd运行时,彻底规避将NVIDIA运行时设为默认导致的Cilium兼容性问题。
具体配置步骤
1. 配置containerd支持多运行时
编辑containerd主配置文件(通常为/etc/containerd/config.toml),在现有runc配置基础上,添加NVIDIA运行时的定义,确保runc保持默认运行时:
[plugins."io.containerd.grpc.v1.cri".containerd] default_runtime_name = "runc" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] runtime_type = "io.containerd.runc.v2" # 添加NVIDIA运行时配置 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia] runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options] BinaryName = "nvidia-container-runtime"
配置完成后重启containerd生效:
systemctl restart containerd
2. 创建RuntimeClass资源
RuntimeClass是Kubernetes的一种资源,用于关联集群中的容器运行时。创建runtimeclass-nvidia.yaml文件:
apiVersion: node.k8s.io/v1 kind: RuntimeClass metadata: name: nvidia handler: nvidia
其中handler字段必须与containerd配置中定义的NVIDIA运行时名称完全一致。执行命令创建该资源:
kubectl apply -f runtimeclass-nvidia.yaml
3. 为GPU工作负载指定RuntimeClass
在需要使用GPU的Pod或Deployment配置中,添加runtimeClassName: nvidia字段,示例Pod配置如下:
apiVersion: v1 kind: Pod metadata: name: gpu-test-pod spec: runtimeClassName: nvidia containers: - name: gpu-container image: nvidia/cuda:11.8.0-runtime-ubuntu22.04 command: ["nvidia-smi"] resources: limits: nvidia.com/gpu: 1
未指定runtimeClassName的Pod会自动使用默认的runc运行时,不会影响Cilium等系统组件。
配置验证
- 查看RuntimeClass资源状态:
kubectl get runtimeclasses - 启动GPU测试Pod后,检查Pod事件确认运行时使用情况:
在事件列表中可找到类似“Using runtime nvidia”的日志,验证运行时配置生效。kubectl describe pod gpu-test-pod - 确认Cilium Pod状态正常:
kubectl get pods -n kube-system -l k8s-app=cilium
内容的提问来源于stack exchange,提问作者d s
相关产品推荐
相关产品推荐

