第一章:课程介绍与环境准备

说实话,每次带新人上手 K8s 和 vLLM 的集成,我都要先问一句:「你的环境准备好了吗?」

这一章,我们就来搞定这件事。别小看环境准备,我见过太多人卡在第一步——集群没搭好,镜像拉不下来,最后折腾半天连个 Pod 都跑不起来。嗯,咱们别走弯路。

1.1 课程整体目标

这门课要做什么?说白了,就是教你用 K8s Ingress 把 vLLM 推理服务暴露出去,让外部能调 API。

vLLM 是个好东西,推理速度快,显存省。但光有模型不行,你得让它跑在集群里,还得让别人能访问。Ingress 就是干这个的——做流量入口,做路由分发。

我个人习惯把这件事拆成三步:

  • 第一步:搭好 K8s 集群,配好 kubectl
  • 第二步:拉取 vLLM 镜像,跑起来
  • 第三步:用 Ingress 把服务暴露出去

这一章,我们只做第一步和第二步的前半段。别急,慢慢来。

1.2 K8s 集群搭建

集群怎么搭?我推荐用 kubeadm。为什么?因为它最接近生产环境,而且踩坑经验最多,网上资料也全。

我在项目中遇到过用 minikube 做测试,结果 Ingress 控制器死活不生效的情况。后来发现是网络插件没配好。所以,咱们直接用 kubeadm 搭一个正经集群。

环境要求

组件 版本建议 说明
操作系统 Ubuntu 22.04 LTS 稳定,兼容性好
Kubernetes v1.28+ 支持最新的 Ingress API
容器运行时 containerd 1.6+ Docker 已弃用,别用了
网络插件 Calico 或 Flannel 我习惯用 Calico
⚠️ 注意: 我曾经因为用了旧版 kubeadm,导致集群初始化失败。建议直接装最新版。命令很简单:apt install kubeadm=1.28.0-00

搭建步骤

  1. 关闭 swapswapoff -a,然后注释掉 /etc/fstab 里的 swap 行。K8s 要求必须关。
  2. 安装容器运行时:装 containerd,配置好 systemd cgroup 驱动。
  3. 安装 kubeadm、kubelet、kubectl:用 apt 装,锁定版本。
  4. 初始化集群kubeadm init --pod-network-cidr=10.244.0.0/16
  5. 配置 kubectl:把 admin.conf 拷到 ~/.kube/config。
  6. 安装网络插件kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

你想想看,这一步其实不难。但有个坑——初始化时如果报错说「端口被占用」,八成是之前装过 Docker 残留的。我遇到过,直接 systemctl stop docker 再重试就行。

1.3 kubectl 配置

kubectl 是咱们操作集群的「遥控器」。配好了,后面所有操作都靠它。

我个人习惯把 kubectl 的自动补全也装上:

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

嗯,这样敲命令快很多。你试试看,按两下 Tab 就能补全 Pod 名字,爽得很。

验证配置是否成功:

kubectl get nodes
# 输出应该类似:
# NAME       STATUS   ROLES           AGE   VERSION
# master     Ready    control-plane   5m    v1.28.0
# worker-1   Ready    <none>          3m    v1.28.0
💡 小技巧: 如果 kubectl get nodes 报错说「connection refused」,检查一下 kube-apiserver 是否在运行。我习惯用 kubectl cluster-info 先看看集群状态。

1.4 vLLM 镜像拉取

vLLM 的镜像,官方推荐用 vllm/vllm-openai:latest。这个镜像包含了 OpenAI 兼容的 API 接口,咱们后面用 Ingress 暴露的就是这个接口。

拉取命令很简单:

docker pull vllm/vllm-openai:latest

但注意,这个镜像挺大的,大概 8-10GB。我建议提前拉好,别等到部署时再拉,网络慢的话能急死人。

如果你用的是 containerd(我推荐),拉取命令稍有不同:

ctr image pull docker.io/vllm/vllm-openai:latest
⚠️ 注意: 我曾经在拉取镜像时遇到「no space left on device」错误。检查一下磁盘空间,vLLM 镜像加上模型文件,轻松占满 20GB。建议预留至少 50GB。

拉取完成后,验证一下:

docker images | grep vllm
# 输出:
# vllm/vllm-openai   latest    abc123def456   10 minutes ago   8.5GB

1.5 本章知识体系

为了让你更直观地理解这一章的内容,我画了一张流程图。它展示了从环境准备到镜像拉取的完整链路:

第一章:环境准备核心流程 K8s 集群搭建 kubectl 配置 vLLM 镜像拉取 kubeadm 初始化 Calico 网络插件 自动补全配置 集群连通性验证 docker pull 镜像 磁盘空间检查 三个步骤环环相扣,缺一不可

1.6 本章小结

这一章,我们搞定了三件事:

  • 用 kubeadm 搭了一个 K8s 集群,装了 Calico 网络插件
  • 配好了 kubectl,加了自动补全
  • 拉取了 vLLM 镜像,检查了磁盘空间

环境准备好了,后面的事就顺了。下一章,我们会把 vLLM 服务部署到集群里,然后配置 Ingress 暴露出去。

嗯,到时候见。


专注资料整理