环境准备:K8s集群搭建与GPU节点配置
说实话,很多人在vLLM部署上栽跟头,不是因为模型本身多复杂,而是环境没搭好。我见过太多人花了两天配环境,最后发现是驱动版本不对——这种坑,咱们今天一次性填平。
这一章,咱们把地基打牢。K8s集群、GPU节点、驱动、CUDA、容器运行时,一个都不能少。
1. K8s集群搭建:Minikube还是K3s?
我个人习惯,本地开发用Minikube,生产环境或者资源受限的机器用K3s。为什么?
- Minikube:功能完整,跟生产K8s几乎一致。适合你完整模拟部署流程。
- K3s:轻量,占用内存小。适合单机或者边缘场景。
咱们这次实战,我建议用K3s。原因很简单——vLLM推理本身就很吃显存,你不想让K8s组件再抢走太多内存吧?
安装K3s(带GPU支持)
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--docker" sh -
等等,这里有个坑。默认K3s用containerd作为运行时,但如果你后续要装nvidia-container-toolkit,我建议直接用--docker参数。我在项目中遇到过,用containerd时nvidia插件配置起来比docker麻烦不少。
装完后,检查一下:
sudo k3s kubectl get nodes
看到节点Ready,就说明集群起来了。
2. GPU节点配置:驱动与CUDA安装
嗯,这里要注意。GPU节点配置是整个环境准备里最容易出问题的环节。我踩过的坑,今天全告诉你。
2.1 NVIDIA驱动安装
先查你的显卡型号:
lspci | grep -i nvidia
然后去NVIDIA官网下载对应驱动。我个人习惯用runfile安装,因为可控性高。
chmod +x NVIDIA-Linux-x86_64-*.run
sudo ./NVIDIA-Linux-x86_64-*.run
装完后验证:
nvidia-smi
如果看到GPU列表,驱动就装好了。我曾经在一台T4机器上装驱动,死活不识别,最后发现是Secure Boot没关——你想想看,这种问题查起来多浪费时间。
2.2 CUDA安装
vLLM需要CUDA 11.8以上。我建议装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。
配环境变量:
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH
验证:
nvcc --version
3. Container Runtime配置:让K8s认识GPU
集群有了,驱动有了,但K8s还不知道你的GPU在哪。这一步就是搭桥。
3.1 安装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
3.2 配置containerd(K3s默认运行时)
如果你用K3s且没加--docker参数,需要手动配置containerd:
sudo nvidia-ctk runtime configure --runtime=containerd
sudo systemctl restart containerd
然后重启K3s:
sudo systemctl restart k3s
3.3 验证GPU是否被K8s识别
kubectl describe node | grep -i nvidia
如果看到类似这样的输出,就说明K8s已经认识你的GPU了:
nvidia.com/gpu: 1
nvidia.com/gpu: 1
4. 核心逻辑一览
这一整套流程,说白了就是三层递进:
- 硬件层:驱动让操作系统认识GPU
- 运行时层:nvidia-container-toolkit让容器认识GPU
- 编排层:K8s device plugin让调度器认识GPU
下面这张图,帮你理清整个关系:
5. 验证全链路
最后,跑一个测试Pod,确认GPU能在K8s里正常工作:
cat <
查看日志:
kubectl logs gpu-test
如果看到GPU信息,恭喜你——环境准备全部完成。
好了,环境就绪。接下来就可以真正开始部署vLLM了。