在AI/ML应用爆发式增长的今天,GPU资源的高效管理成为技术团队的核心挑战。传统命令行操作不仅学习曲线陡峭,在多集群、多节点场景下更是容易出错。本文将带你通过Rancher这一企业级Kubernetes管理平台,实现RKE2 GPU集群的可视化管控与自动化部署,让NVIDIA GPU资源像普通计算资源一样简单易用。
GPU集群对底层环境的一致性要求极高,推荐使用Ubuntu 22.04 LTS作为基础操作系统。以下关键配置需在所有节点执行:
bash复制# 检查内核版本(推荐5.15+)
uname -r
# 禁用默认驱动
sudo apt purge -y nvidia* && sudo apt autoremove -y
# 安装基础工具链
sudo apt update && sudo apt install -y \
curl tmux git nfs-common
提示:使用
lsb_release -a确认所有节点系统版本完全一致,GPU-Operator对内核版本敏感度极高。
针对国内网络环境,离线安装可避免镜像拉取失败问题。关键步骤如下:
下载离线包(以v1.30.4为例):
rke2-images.linux-amd64.tar.zstrke2.linux-amd64.tar.gzsha256sum-amd64.txt部署目录结构:
bash复制sudo mkdir -p /var/lib/rancher/rke2/agent/images
sudo mkdir -p /root/rke2-artifacts
安装与启动:
bash复制sudo INSTALL_RKE2_ARTIFACT_PATH=/root/rke2-artifacts sh install.sh
sudo systemctl enable --now rke2-server.service
配置kubectl:
bash复制mkdir -p ~/.kube
sudo cp /etc/rancher/rke2/rke2.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
通过以下命令跳过cert-manager快速部署Rancher:
bash复制helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
kubectl create namespace cattle-system
helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=rancher.yourdomain.com \
--set ingress.tls.source=secret \
--set bootstrapPassword=Admin@12345
常见问题处理方案:
| 问题现象 | 解决方案 | 检查命令 |
|---|---|---|
| ImagePullBackOff | 手动替换镜像为国内源 | kubectl edit pod <name> -n cattle-system |
| CrashLoopBackOff | 检查节点资源是否充足 | kubectl describe pod <name> |
| 503 Service Unavailable | 确认Ingress配置正确 | kubectl get ingress -n cattle-system |
在Rancher UI中导入现有RKE2集群只需三步:
curl命令到RKE2 Server节点执行注意:导入完成后需在集群仪表盘中检查所有组件状态,确保
fleet-agent和cattle-cluster-agent运行正常。
针对RKE2环境的特殊配置参数:
bash复制helm upgrade --install gpu-operator nvidia/gpu-operator \
-n gpu-operator --create-namespace \
--set operator.defaultRuntime="containerd" \
--set toolkit.env[0].name=CONTAINERD_CONFIG \
--set toolkit.env[0].value=/var/lib/rancher/rke2/agent/etc/containerd/config.toml \
--set toolkit.env[1].name=CONTAINERD_SOCKET \
--set toolkit.env[1].value=/run/k3s/containerd/containerd.sock
关键组件状态检查:
bash复制watch kubectl get pods -n gpu-operator
# 预期输出应包含:
# gpu-operator-xxxx 1/1 Running
# nvidia-driver-daemonset-xxxx 1/1 Running
# nvidia-container-toolkit-daemonset-xxxx 1/1 Running
编辑RKE2的containerd配置模板:
toml复制# /var/lib/rancher/rke2/agent/etc/containerd/config.toml.tmpl
[plugins."io.containerd.grpc.v1.cri".containerd]
default_runtime_name = "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 = "/usr/local/nvidia/toolkit/nvidia-container-runtime"
重启服务使配置生效:
bash复制sudo systemctl restart rke2-server.service
在Rancher UI中创建工作负载时,需要特别关注:
runtimeClassName: nvidiaYAML配置示例:
yaml复制resources:
limits:
nvidia.com/gpu: 2
requests:
cpu: 4
memory: 16Gi
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: nvidia.com/gpu.present
operator: Exists
Rancher集成的监控功能可直观展示GPU指标:
GPU指标采集原理:
dcgm-exporter以DaemonSet形式运行| 故障现象 | 诊断命令 | 解决方案 |
|---|---|---|
| Pod无法识别GPU | kubectl describe pod |
检查runtimeClass和资源限制 |
| 驱动加载失败 | `dmesg | grep -i nvidia` |
| CUDA库缺失 | kubectl exec -it -- nvidia-smi |
验证基础镜像包含CUDA |
| 性能异常 | nvidia-smi topo -m |
检查PCIe拓扑和NVLINK状态 |
滚动升级顺序:
GPU相关组件升级注意事项:
bash复制helm upgrade gpu-operator nvidia/gpu-operator \
--reset-values \
--set driver.version=525.85.12
验证步骤:
nvidia-smi确认驱动版本在实际生产环境中,建议通过Rancher的备份恢复功能定期保存集群状态。对于GPU密集型负载,我们团队发现为每个节点配置GPU健康检查脚本能提前发现硬件异常,典型检查项包括:
bash复制#!/bin/bash
nvidia-smi -q | grep -q "Driver Version" || exit 1
nvidia-smi -q | grep -q "GPU 00000000:00:00.0" || exit 1
nvidia-smi topo -m | grep -q "NV1" || exit 1