环境准备:K8s集群搭建与GPU节点配置
说实话,做AI推理部署这么多年,我踩过最大的坑就是环境没准备好就急着跑模型。你想想看,vLLM这种高性能推理框架,对底层环境的要求其实挺苛刻的。GPU驱动版本不对、CUDA没装好、K8s集群网络不通……任何一个环节出问题,后面都得返工。
这一章,我就带你一步步把地基打牢。咱们的目标很明确:一个能跑vLLM的K8s集群,带GPU支持。
1. 选择你的K8s集群方案
我个人习惯把集群方案分成两类:本地开发用和生产环境用。咱们课程里主要讲本地开发,所以重点介绍Minikube和K3s。
| 方案 | 适用场景 | 资源消耗 | GPU支持 |
|---|---|---|---|
| Minikube | 单机开发、测试 | 中等(2-4GB内存) | 支持(需配置) |
| K3s | 边缘计算、轻量生产 | 低(512MB内存起步) | 支持(需手动配置) |
| Kind | CI/CD、快速测试 | 低(Docker容器内) | 有限支持 |
我建议你选Minikube。为什么?因为它的GPU支持最成熟,社区文档也最全。我在项目中遇到过用K3s配GPU,折腾了一整天驱动才跑起来……嗯,那滋味不好受。
2. 安装Minikube
安装过程其实很简单。但有几个细节要注意,不然容易翻车。
前置条件:
- 一台Linux机器(Ubuntu 20.04/22.04 我推荐)
- 至少4GB内存,20GB磁盘空间
- Docker或containerd作为容器运行时
先装Docker,这个不用我多说了吧?
# 安装Docker
curl -fsSL https://get.docker.com | bash
sudo usermod -aG docker $USER
# 记得退出重新登录,让用户组生效
然后装Minikube:
# 下载Minikube二进制文件
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 启动集群(带GPU支持)
minikube start --driver=docker \
--cpus=4 \
--memory=8192 \
--gpus=all
这里有个坑——--gpus=all这个参数,很多人以为加上就能用。其实不然。它只是告诉Minikube把宿主机上的GPU设备挂载进去。真正的GPU支持,还得靠后面的驱动和CUDA。
小技巧:如果你用的是NVIDIA GPU,启动前先跑一下 nvidia-smi 确认驱动正常。我曾经遇到过驱动装好了但没重启,结果Minikube死活认不到GPU。
3. GPU节点配置:NVIDIA驱动安装
说到驱动安装,这可是个技术活。我见过太多人在这上面栽跟头了。
首先,确认你的GPU型号:
lspci | grep -i nvidia
然后去NVIDIA官网下载对应驱动。我个人习惯用runfile方式安装,因为可控性更强。
# 先卸载旧驱动(如果有)
sudo apt-get purge nvidia-*
# 安装依赖
sudo apt-get install build-essential dkms
# 禁用nouveau开源驱动
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nvidia-nouveau.conf
sudo update-initramfs -u
# 重启
# 安装驱动
chmod +x NVIDIA-Linux-x86_64-*.run
sudo ./NVIDIA-Linux-x86_64-*.run --dkms
警告:千万不要用Ubuntu自带的 ubuntu-drivers autoinstall 命令!我踩过这个坑——它装的是开源驱动,vLLM跑起来性能直接打对折。一定要装NVIDIA官方的闭源驱动。
装完后验证:
nvidia-smi
# 应该能看到GPU信息,驱动版本建议 >= 525
4. CUDA安装与配置
CUDA的版本选择很关键。vLLM目前对CUDA 11.8和12.1支持最好。我个人推荐CUDA 12.1,因为新特性更多,而且和PyTorch 2.x兼容性更好。
# 下载CUDA 12.1
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run
# 安装时注意:
# - 不要安装驱动(我们已经装过了)
# - 只选CUDA Toolkit和CUDA Samples
配置环境变量:
# 添加到 ~/.bashrc
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH
source ~/.bashrc
# 验证
nvcc --version
重要:CUDA安装完成后,一定要安装NVIDIA Container Toolkit。这是让K8s识别GPU的关键组件。
# 安装NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
# 配置Docker运行时
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
5. 验证GPU是否被K8s识别
这一步很关键。我曾经在客户现场折腾了一下午,最后发现是nvidia-device-plugin没装。
# 部署NVIDIA device plugin
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.0/nvidia-device-plugin.yml
# 查看节点GPU状态
kubectl get nodes -o json | jq '.items[].status.capacity'
# 应该能看到 nvidia.com/gpu: 1 这样的字段
跑一个测试Pod验证:
cat <
6. 知识体系总览
下面这张图,是我梳理的本章核心逻辑。你看一遍,心里就有谱了。
说白了,整个流程就是一条链:硬件 → 驱动 → CUDA → 容器运行时 → K8s。任何一个环节断了,GPU就用不了。
7. 避坑指南
最后,分享几个我亲身踩过的坑:
- 驱动版本不匹配:我曾经在CUDA 12.0上装了驱动530,结果nvidia-smi报错。后来发现CUDA 12.0需要驱动>=525.60.13。所以装之前一定去NVIDIA官网查兼容性矩阵。
- Minikube启动参数遗漏:有次我忘了加
--gpus=all,结果集群跑起来了但Pod调度不到GPU。排查了半天才发现是启动参数的问题。 - Device Plugin版本:K8s 1.28以上版本,必须用nvidia-device-plugin v0.14.0以上。老版本会报CRI API不兼容的错误。
我的建议:环境准备好后,先跑一个简单的PyTorch测试脚本,确认GPU计算正常。别急着上vLLM。基础打牢了,后面才稳。
嗯,环境准备这块就讲到这里。你按照这个步骤走,应该不会出大问题。如果遇到报错,先检查驱动和CUDA版本,80%的问题都出在这两个地方。
公众号:蓝海资料掘金营,微信deep3321