环境准备:K8s集群搭建与GPU节点配置
说实话,做vLLM多模型管理,最头疼的往往不是模型本身,而是底层环境。我见过太多人花了两周调模型,结果卡在K8s集群搭建上。嗯,这一章我们就来搞定它。
我个人习惯用Minikube做本地开发,K3s做边缘或资源受限场景。生产环境嘛,当然还是标准K8s集群。但不管哪种,核心思路都一样——把GPU节点配置好,让vLLM能顺畅跑起来。
1. Minikube搭建(本地开发首选)
Minikube适合单机开发。你想想看,一台笔记本就能模拟整个集群,多方便。
核心要求:Minikube版本 ≥ 1.25,Docker驱动,支持GPU直通
# 安装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=8 \
--memory=16384 \
--gpus=all \
--kubernetes-version=v1.28.0
# 验证GPU是否可用
minikube ssh -- nvidia-smi
我的经验:曾经有一次我忘了加--gpus=all参数,结果vLLM一直报CUDA错误。排查了半天才发现是Minikube没挂载GPU。所以启动时一定要确认这个参数。
2. K3s搭建(边缘/资源受限场景)
K3s是轻量级K8s,二进制文件才几十兆。我在边缘推理项目中用过,效果不错。
# 安装K3s(主节点)
curl -sfL https://get.k3s.io | sh -s - \
--docker \
--disable=traefik \
--kubelet-arg="feature-gates=DevicePlugins=true"
# 配置kubectl
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
# 加入工作节点(在worker上执行)
curl -sfL https://get.k3s.io | K3S_URL=https://<master-ip>:6443 \
K3S_TOKEN=<token> sh -
注意:K3s默认使用containerd,但vLLM对Docker支持更好。我建议加上--docker参数,避免后续容器运行时兼容性问题。
3. Helm安装(包管理利器)
Helm是K8s的包管理器。说白了,就是帮你一键部署复杂应用。vLLM的官方Chart就是用Helm管理的。
# 安装Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 添加vLLM官方仓库
helm repo add vllm https://vllm-project.github.io/helm-charts
helm repo update
# 验证安装
helm version
helm search repo vllm
避坑指南:我曾经遇到过Helm版本不兼容的问题。vLLM的Chart要求Helm ≥ 3.8,低于这个版本会报错。建议直接用最新版。
4. GPU节点配置(重中之重)
GPU配置是vLLM部署的关键。没有GPU,大模型推理就是空谈。这里我分三步走:
4.1 安装NVIDIA驱动
# 检查GPU型号
lspci | grep -i nvidia
# 安装驱动(以Ubuntu为例)
sudo apt-get update
sudo apt-get install -y nvidia-driver-535
# 重启后验证
nvidia-smi
4.2 安装NVIDIA Container Toolkit
这个工具让Docker容器能访问GPU。没有它,容器里根本用不了CUDA。
# 添加仓库
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 systemctl restart docker
4.3 配置K8s GPU插件
# 部署NVIDIA设备插件
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.allocatable'
# 应该能看到 nvidia.com/gpu: 1 或更多
关键检查点:执行kubectl describe node,确认nvidia.com/gpu出现在Capacity和Allocatable中。如果没有,说明设备插件没生效。
5. 验证环境
环境搭好了,得跑个测试看看。我习惯用vLLM的测试镜像验证:
# 创建测试Pod
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: gpu-test
spec:
containers:
- name: cuda-test
image: nvidia/cuda:12.1.0-base-ubuntu22.04
command: ["nvidia-smi"]
resources:
limits:
nvidia.com/gpu: 1
EOF
# 查看日志
kubectl logs gpu-test
# 清理
kubectl delete pod gpu-test
如果看到GPU信息,说明环境配置成功。嗯,这一步很重要,别跳过。
6. 知识体系总览
下面这张图是我自己整理的,把整个环境准备的核心逻辑串起来了:
7. 常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Pod一直Pending | GPU资源不足 | 检查kubectl describe pod,确认节点GPU可用 |
| CUDA不可用 | Container Toolkit未安装 | 重新安装nvidia-container-toolkit并重启Docker |
| Helm部署失败 | 版本不兼容 | 升级Helm到3.8+,或检查Chart版本 |
| Minikube启动慢 | 镜像拉取超时 | 使用国内镜像源,或提前拉取镜像 |
我的经验:遇到问题先看日志。很多新手一上来就重装,其实kubectl describe和journalctl -u kubelet就能解决80%的问题。
环境准备这块,说白了就是打好地基。地基稳了,后面部署vLLM、管理多模型才能顺风顺水。我个人建议,花点时间把这一步做扎实,别急着跑模型。嗯,磨刀不误砍柴工嘛。