环境准备: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. 知识体系总览

下面这张图是我自己整理的,把整个环境准备的核心逻辑串起来了:

vLLM环境准备知识体系 K8s集群搭建 Helm包管理 GPU节点配置 Minikube(本地开发) K3s(边缘场景) Helm安装与配置 vLLM Chart仓库 NVIDIA驱动安装 Container Toolkit K8s设备插件 vLLM多模型管理集群

7. 常见问题排查

问题现象 可能原因 解决方案
Pod一直Pending GPU资源不足 检查kubectl describe pod,确认节点GPU可用
CUDA不可用 Container Toolkit未安装 重新安装nvidia-container-toolkit并重启Docker
Helm部署失败 版本不兼容 升级Helm到3.8+,或检查Chart版本
Minikube启动慢 镜像拉取超时 使用国内镜像源,或提前拉取镜像

我的经验:遇到问题先看日志。很多新手一上来就重装,其实kubectl describejournalctl -u kubelet就能解决80%的问题。

环境准备这块,说白了就是打好地基。地基稳了,后面部署vLLM、管理多模型才能顺风顺水。我个人建议,花点时间把这一步做扎实,别急着跑模型。嗯,磨刀不误砍柴工嘛。

专注资料整理