第1章:环境准备——先把家伙事儿备齐

说实话,搞 vLLM 和 K8s 集成,最怕的不是后面的配置有多复杂,而是第一步环境就没搭好。我见过太多人卡在 Docker 起不来、K8s 集群连不上这种基础问题上。所以这一章,咱们先把地基打牢。

我个人习惯把环境准备分成四块:Docker 运行时本地 K8s 集群kubectl 命令行工具,以及最后的集群验证。一块一块来,别急。

环境准备核心四步 ① Docker 安装 容器运行时基础 ② 镜像加速配置 国内拉取提速 ③ K8s 集群搭建 Minikube / Kind ④ kubectl + 验证 命令行与集群状态 💡 建议顺序:Docker → 镜像加速 → 集群 → kubectl 每一步都验证通过后再往下走,避免连锁问题

2.1 安装 Docker

Docker 是整个容器化生态的基石。vLLM 的推理服务最终会打包成镜像跑在容器里,所以这一步绕不开。

我个人推荐用 Docker Desktop(Mac/Windows)或者直接 apt/yum 安装(Linux)。别用那种一键脚本,出了问题你都不知道去哪查日志。

Linux 上安装很简单:

# Ubuntu / Debian
sudo apt update
sudo apt install docker.io -y

# CentOS / RHEL
sudo yum install docker -y
sudo systemctl start docker
sudo systemctl enable docker

装完之后,记得把当前用户加到 docker 组里。不然每次都要 sudo,烦得很。

sudo usermod -aG docker $USER
# 然后退出重新登录,或者执行 newgrp docker
💡 小技巧: 验证 Docker 是否装好,跑个 hello-world 镜像试试。如果看到 "Hello from Docker!" 就说明成了。
docker run hello-world

2.2 配置 Docker 镜像加速

嗯,这里要注意。国内拉 Docker 官方镜像,速度你懂的。我曾经在项目部署时,一个 PyTorch 镜像拉了半小时还没完,急得我直跺脚。

配置镜像加速器,说白了就是给 Docker 加个代理。国内常用的有阿里云、中科大、清华的源。我个人习惯用阿里云的,稳定。

编辑 /etc/docker/daemon.json(没有就新建一个):

{
  "registry-mirrors": [
    "https://你的加速地址.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

然后重启 Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker
⚠️ 避坑指南: 我曾经遇到过配置了加速器但拉取还是慢的情况。后来发现是 daemon.json 的 JSON 格式写错了——多了一个逗号。Docker 不会报错,但配置根本没生效。所以改完后记得用 docker info 检查一下 Registry Mirrors 字段是否显示你的地址。

2.3 安装 Minikube 或 Kind

本地跑 K8s 集群,主流就两个选择:MinikubeKind。怎么选?

特性 Minikube Kind
底层实现 虚拟机(通常用 VirtualBox 或 HyperKit) Docker 容器作为节点
启动速度 较慢(需要启动 VM) 快(秒级启动)
资源占用 较高 较低
适合场景 需要完整 K8s 体验,比如 LoadBalancer、存储卷 快速测试、CI/CD 环境
vLLM 适配 推荐(GPU 穿透更方便) 也可以,但 GPU 支持稍麻烦

我个人建议:如果你只是学 vLLM 集成,用 Kind 就够了,轻量快速。但如果你要测试 GPU 推理,那还是 Minikube 更靠谱。

安装 Minikube:

# Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动集群(指定驱动为 docker)
minikube start --driver=docker --cpus=4 --memory=8192

安装 Kind:

# Linux
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

# 创建集群
kind create cluster --name vllm-cluster
🔑 关键点: 不管用哪个,启动时记得给足资源。vLLM 加载模型需要内存,推理需要 CPU/GPU。我一般给 Minikube 分配 4 核 8G 起步。

2.4 安装 kubectl 命令行工具

kubectl 是你和 K8s 集群对话的桥梁。没有它,你连 pod 都看不到。

安装方式很简单:

# Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/kubectl

# 验证版本
kubectl version --client

装完之后,kubectl 会自动读取 ~/.kube/config 文件。Minikube 和 Kind 在创建集群时都会自动生成这个文件,所以你不用手动配。

💡 小技巧: 我习惯给 kubectl 配个别名,少打几个字:alias k=kubectl。再配合 kubectl completion bash 开启自动补全,效率翻倍。

2.5 验证 K8s 集群状态

环境搭没搭好,跑几个命令就知道了。别急着部署 vLLM,先确认集群是健康的。

# 查看集群信息
kubectl cluster-info

# 查看节点状态
kubectl get nodes

# 查看所有命名空间的 pod
kubectl get pods --all-namespaces

如果看到节点状态是 Ready,核心组件(如 coredns、kube-proxy)都在运行,那就说明环境准备好了。

⚠️ 避坑指南: 我曾经遇到一个情况——kubectl get nodes 显示节点 NotReady。查了半天,发现是 Docker 的 cgroup 驱动和 K8s 的不一致。解决办法:确保 Docker 的 cgroup 驱动是 systemd(在 daemon.json 里加 "exec-opts": ["native.cgroupdriver=systemd"])。

还有一个我常用的验证方式——跑个 nginx 测试 pod:

kubectl run test-nginx --image=nginx --restart=Never
kubectl get pod test-nginx
# 等状态变成 Running 后,删除测试 pod
kubectl delete pod test-nginx

如果这个 pod 能正常跑起来,那你的集群就完全可用了。接下来就可以放心地部署 vLLM 了。


好了,环境准备就到这里。记住一句话:基础不牢,地动山摇。Docker 装好、镜像加速配好、集群跑起来、kubectl 能连上——这四个条件缺一个,后面的 vLLM 部署都会出幺蛾子。

我个人建议你把每一步的验证结果都截图保存,万一后面出问题,排查起来也有据可查。

专注资料整理