Operadores de GPU
Desplegar el operador de NVIDIA
El NVIDIA operator permite a los administradores de clústeres de Kubernetes gestionar GPUs como si fueran CPUs. Incluye todo lo necesario para que los pods operen GPUs.
Requisitos del sistema operativo del host
Para exponer la GPU al pod correctamente, los controladores del núcleo de NVIDIA y la biblioteca libnvidia-ml deben estar correctamente instalados en el sistema operativo del host. El operador de NVIDIA puede instalar automáticamente controladores y bibliotecas en algunos sistemas operativos. Consulta la documentación de NVIDIA para obtener información sobre versiones de sistemas operativos soportados. La instalación de los componentes de NVIDIA en tu sistema operativo del host está fuera del alcance de esta documentación, consulta la documentación de NVIDIA para obtener instrucciones.
Los siguientes tres comandos deberían devolver una salida correcta si el controlador del núcleo fue instalado correctamente:
-
lsmod | grep nvidiadevuelve una lista de módulos del núcleo de NVIDIA. Por ejemplo:nvidia_uvm 2129920 0 nvidia_drm 131072 0 nvidia_modeset 1572864 1 nvidia_drm video 77824 1 nvidia_modeset nvidia 9965568 2 nvidia_uvm,nvidia_modeset ecc 45056 1 nvidia -
cat /proc/driver/nvidia/versiondevuelve la versión de NVRM y GCC del controlador. Por ejemplo:NVRM version: NVIDIA UNIX Open Kernel Module for x86_64 555.42.06 Release Build (abuild@host) Thu Jul 11 12:00:00 UTC 2024 GCC version: gcc version 7.5.0 (SUSE Linux) -
find /usr/ -iname libnvidia-ml.sodevuelve una vía a la bibliotecalibnvidia-ml.so. Por ejemplo:/usr/lib64/libnvidia-ml.soEsta biblioteca es utilizada por los componentes de Kubernetes para interactuar con el controlador del núcleo.
Instalación del operador
Una vez que el sistema operativo esté listo y RKE2 esté en funcionamiento, instala el operador de GPU con el siguiente manifiesto yaml.
-
v25.3.x
-
v25.10.x
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: gpu-operator
namespace: kube-system
spec:
repo: https://helm.ngc.nvidia.com/nvidia
chart: gpu-operator
version: v25.3.4
targetNamespace: gpu-operator
createNamespace: true
valuesContent: |-
toolkit:
env:
- name: CONTAINERD_SOCKET
value: /run/k3s/containerd/containerd.sock
- name: ACCEPT_NVIDIA_VISIBLE_DEVICES_ENVVAR_WHEN_UNPRIVILEGED
value: "false"
- name: ACCEPT_NVIDIA_VISIBLE_DEVICES_AS_VOLUME_MOUNTS
value: "true"
devicePlugin:
env:
- name: DEVICE_LIST_STRATEGY
value: volume-mounts
|
Las variables de entorno |
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: gpu-operator
namespace: kube-system
spec:
repo: https://helm.ngc.nvidia.com/nvidia
chart: gpu-operator
version: v25.10.1
targetNamespace: gpu-operator
createNamespace: true
valuesContent: |-
toolkit:
env:
- name: CONTAINERD_SOCKET
value: /run/k3s/containerd/containerd.sock
|
El operador de GPU de NVIDIA v25.10.x utiliza la especificación de la Interfaz de Dispositivos de Contenedor (CDI) y eso simplifica las operaciones: no necesitamos pasar variables de entorno adicionales para cumplir con los requisitos de seguridad y las cargas de trabajo ya no necesitan pasar el |
|
El operador de NVIDIA reinicia containerd con una llamada de hangup que reinicia RKE2 |
Después de aproximadamente un minuto, puedes realizar las siguientes comprobaciones para verificar que todo funciona como se espera:
-
Suponiendo que los controladores y la biblioteca
libnvidia-ml.sose instalaron previamente, verifica si el operador los detecta correctamente:kubectl get node $NODENAME -o jsonpath='{.metadata.labels}' | grep "nvidia.com/gpu.deploy.driver"Deberías ver el valor
pre-installed. Si vestrue, los controladores no se instalaron correctamente. Si los pre-requisitos eran correctos, es posible que hayas olvidado reiniciar el nodo después de instalar todos los paquetes.También puedes comprobar otras etiquetas de controladores con:
kubectl get node $NODENAME -o jsonpath='{.metadata.labels}' | grep "nvidia.com"Deberías ver etiquetas que especifican el controlador y la GPU (por ejemplo,
nvidia.com/gpu.machineonvidia.com/cuda.driver.major). -
Verifica si la GPU fue añadida por
nvidia-device-plugin-daemonsetcomo un recurso asignable en el nodo:kubectl get node $NODENAME -o jsonpath='{.status.allocatable}'Deberías ver
"nvidia.com/gpu":seguido del número de GPUs en el nodo. -
Verifica que el binario del entorno de ejecución de contenedor exista (se instala mediante el
nvidia-container-toolkit-daemonset):ls /usr/local/nvidia/toolkit/nvidia-container-runtime -
Verifica si la configuración de containerd se actualizó para incluir el entorno de ejecución de contenedor de NVIDIA:
grep nvidia /var/lib/rancher/rke2/agent/etc/containerd/config.toml -
Ejecuta un pod para verificar que el recurso GPU se puede programar con éxito en un pod y que el pod puede detectarlo
apiVersion: v1 kind: Pod metadata: name: nbody-gpu-benchmark namespace: default spec: restartPolicy: OnFailure # runtimeClassName: nvidia <== Only needed for v25.3.x containers: ** name: cuda-container image: nvcr.io/nvidia/k8s/cuda-sample:nbody args: ["nbody", "-gpu", "-benchmark"] resources: limits: nvidia.com/gpu: 1
|
Puerta de Versión
Disponible a partir de las versiones de octubre de 2024: v1.28.15+rke2r1, v1.29.10+rke2r1, v1.30.6+rke2r1, v1.31.2+rke2r1. |
RKE2 ahora utilizará PATH para encontrar entornos de ejecución de contenedor alternativos, además de verificar las rutas predeterminadas utilizadas por los paquetes del entorno de ejecución de contenedor. Para utilizar esta función, debes modificar la variable de entorno PATH del servicio RKE2 para agregar los directorios que contienen los binarios del entorno de ejecución de contenedor.
Se recomienda que modifique uno de estos dos archivos de variables de entorno:
-
/etc/default/rke2-server# o rke2-agent -
/etc/sysconfig/rke2-server# o rke2-agent
Este ejemplo añadirá el PATH en /etc/default/rke2-server:
|
Los cambios en |
echo PATH=$PATH >> /etc/default/rke2-server