环境准备:K8s集群搭建与GPU节点配置
说实话,做AI推理服务部署这么多年,我踩过最大的坑就是环境准备阶段。很多人一上来就急着跑模型,结果集群搭好了GPU用不了,或者驱动版本不匹配,折腾好几天。这一章,咱们就把这些基础工作一次性搞定。
核心目标:搭建一个可用的K8s集群,并让GPU节点能够被正常调度。
2.1 集群搭建方案选择
我个人习惯根据场景选方案。如果你只是本地学习或测试,Minikube就够了。但如果是生产环境,或者你想真正体验GPU调度,那还是得用Kubeadm。
| 方案 | 适用场景 | 资源要求 | GPU支持 |
|---|---|---|---|
| Minikube | 本地开发、单机测试 | 低(2核4G起步) | 需额外配置 |
| Kubeadm | 生产环境、多节点集群 | 较高(每节点4核8G+) | 原生支持 |
嗯,这里要注意:如果你用Minikube,记得开启GPU支持。我遇到过有人搭好了集群,结果发现Minikube默认不挂载GPU设备,白白浪费了时间。
2.2 Minikube快速搭建
先说说Minikube。它其实就是一个轻量级的K8s实现,适合快速验证。我个人建议用Docker驱动,省事。
# 安装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 --gpus=all
# 验证集群状态
kubectl get nodes
为什么推荐Docker驱动?因为它在Linux上最稳定。我曾经试过用VirtualBox驱动,结果网络配置折腾了一下午。
小技巧:启动时加上 --cpus=4 --memory=8192 参数,给集群分配更多资源。vLLM推理服务对内存要求不低。
2.3 Kubeadm生产级搭建
如果你要搞生产环境,Kubeadm是标配。我一般这么操作:
# 1. 所有节点安装容器运行时(这里用containerd)
sudo apt-get update
sudo apt-get install -y containerd
# 2. 安装kubeadm、kubelet、kubectl
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# 3. 初始化控制平面(master节点)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# 4. 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 5. 安装网络插件(我用Flannel)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# 6. 工作节点加入集群(在worker节点执行)
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
这里有个坑:Pod网络CIDR一定要和你的实际网络不冲突。我之前有个项目,因为用了10.244.0.0/16,结果和公司内网冲突了,排查了半天才发现。
2.4 GPU节点配置
集群搭好了,接下来就是让K8s认识GPU。说白了,就是装驱动、装CUDA、装NVIDIA容器工具包。
2.4.1 NVIDIA驱动安装
我建议用官方run文件安装,虽然麻烦点,但最可控。
# 查看显卡型号
lspci | grep -i nvidia
# 下载对应驱动(以A100为例)
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/535.154.05/NVIDIA-Linux-x86_64-535.154.05.run
# 安装驱动
chmod +x NVIDIA-Linux-x86_64-535.154.05.run
sudo ./NVIDIA-Linux-x86_64-535.154.05.run
# 验证安装
nvidia-smi
警告:驱动版本和CUDA版本必须匹配。比如驱动535系列对应CUDA 12.2。我曾经因为驱动版本太低,导致CUDA 12.4装不上,折腾了两天。
2.4.2 CUDA安装
CUDA其实不用装完整版,装个runtime就够了。但如果你要编译自定义算子,那就得装完整版。
# 下载CUDA 12.2
wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run
# 安装(只选CUDA Toolkit,不装驱动)
sudo sh cuda_12.2.0_535.54.03_linux.run --toolkit --silent
# 配置环境变量
echo 'export PATH=/usr/local/cuda-12.2/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
# 验证
nvcc --version
2.4.3 NVIDIA容器工具包
这是让K8s容器能用GPU的关键。说白了,就是把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
# 配置containerd使用nvidia运行时
sudo nvidia-ctk runtime configure --runtime=containerd
sudo systemctl restart containerd
2.5 验证GPU可用性
环境配好了,得验证一下。我一般跑个测试Pod看看。
# 创建测试Pod
cat <
如果能看到GPU信息,说明环境没问题。如果报错,多半是驱动或容器工具包没配好。
避坑指南:我曾经遇到过Pod一直Pending,原因是忘了给节点打标签。记得执行 kubectl label nodes <node-name> nvidia.com/gpu.present=true。
2.6 本章知识体系
下面这张图,是我自己总结的环境准备核心流程。你照着这个思路走,基本不会出大问题。
嗯,环境准备这块,说白了就是三步走:搭集群、装驱动、配工具包。每一步都有坑,但只要你按这个流程来,基本能一次搞定。
最后提醒一句:别急着跑模型。先花半天时间把环境验证透,后面能省你三天时间。我当年就是吃了这个亏,后来再也不敢偷懒了。