You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 18.04部署K8s集群后nvidia/k8s-device-plugin:1.9报错求助

解决Kubernetes 1.15.2上NVIDIA设备插件注册失败的问题

看你遇到的报错,核心问题是插件版本和Kubernetes版本不兼容。Kubernetes 1.15.x使用的是Device Plugin API v1beta1,而你用的nvidia/k8s-device-plugin:1.9是针对API v1版本的(这个版本是在K8s 1.16+才引入的),所以会出现unknown service deviceplugin.Registration的错误。下面是具体的解决步骤:

1. 替换为兼容的设备插件版本

针对K8s 1.15.x,你需要使用支持v1beta1 API的插件版本,比如nvidia/k8s-device-plugin:1.0.0-beta6。执行以下命令测试:

docker run --security-opt=no-new-privileges --cap-drop=ALL --network=none -it -v /var/lib/kubelet/device-plugins:/var/lib/kubelet/device-plugins nvidia/k8s-device-plugin:1.0.0-beta6

如果成功的话,你会看到类似Starting to serve on /var/lib/kubelet/device-plugins/nvidia.sock和Registered device plugin with Kubelet的日志。

2. 确认Kubelet的Device Plugin特性门控

虽然K8s 1.10之后Device Plugin特性默认启用,但还是建议检查一下kubelet的启动参数:

  • 查看kubelet配置文件(通常在/etc/systemd/system/kubelet.service.d/10-kubeadm.conf),确认是否包含--feature-gates=DevicePlugins=true
  • 如果没有,添加这个参数后重启kubelet:
systemctl daemon-reload
systemctl restart kubelet

3. 验证nvidia-container-runtime配置

你的/etc/docker/daemon.json配置看起来没问题,但要确保Docker已经重启过,并且默认runtime生效:

docker info | grep Runtime

输出应该包含Default Runtime: nvidia,如果不是的话,重启Docker服务:

systemctl restart docker

4. 用DaemonSet规范部署设备插件

手动运行容器只是临时测试,正式环境推荐用DaemonSet部署,这样插件会自动在所有GPU节点上运行。创建一个yaml文件(比如nvidia-device-plugin.yaml),内容如下:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: nvidia-device-plugin-daemonset
  namespace: kube-system
spec:
  template:
    metadata:
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ""
      labels:
        name: nvidia-device-plugin-ds
    spec:
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      - key: nvidia.com/gpu
        operator: Exists
        effect: NoSchedule
      containers:
      - image: nvidia/k8s-device-plugin:1.0.0-beta6
        name: nvidia-device-plugin-ctr
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
        volumeMounts:
          - name: device-plugin
            mountPath: /var/lib/kubelet/device-plugins
      volumes:
        - name: device-plugin
          hostPath:
            path: /var/lib/kubelet/device-plugins

然后部署:

kubectl apply -f nvidia-device-plugin.yaml

5. 验证GPU可用性

部署完成后,先检查插件pod的状态:

kubectl get pods -n kube-system | grep nvidia

然后创建一个测试pod验证GPU是否能被调度:

apiVersion: v1
kind: Pod
metadata:
  name: gpu-test
spec:
  containers:
    - name: cuda-container
      image: nvidia/cuda:10.2-base
      command: ["nvidia-smi"]
      resources:
        limits:
          nvidia.com/gpu: 1

创建并查看日志:

kubectl create -f gpu-test.yaml
kubectl logs gpu-test

如果能正常输出NVIDIA-SMI的信息,说明GPU设备插件已经正常工作了。

内容的提问来源于stack exchange,提问作者Wallace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:42:51