第一章:课程介绍与环境准备
说实话,每次带新人上手 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 |
apt install kubeadm=1.28.0-00。
搭建步骤
- 关闭 swap:
swapoff -a,然后注释掉 /etc/fstab 里的 swap 行。K8s 要求必须关。 - 安装容器运行时:装 containerd,配置好 systemd cgroup 驱动。
- 安装 kubeadm、kubelet、kubectl:用 apt 装,锁定版本。
- 初始化集群:
kubeadm init --pod-network-cidr=10.244.0.0/16 - 配置 kubectl:把 admin.conf 拷到 ~/.kube/config。
- 安装网络插件:
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
拉取完成后,验证一下:
docker images | grep vllm
# 输出:
# vllm/vllm-openai latest abc123def456 10 minutes ago 8.5GB
1.5 本章知识体系
为了让你更直观地理解这一章的内容,我画了一张流程图。它展示了从环境准备到镜像拉取的完整链路:
1.6 本章小结
这一章,我们搞定了三件事:
- 用 kubeadm 搭了一个 K8s 集群,装了 Calico 网络插件
- 配好了 kubectl,加了自动补全
- 拉取了 vLLM 镜像,检查了磁盘空间
环境准备好了,后面的事就顺了。下一章,我们会把 vLLM 服务部署到集群里,然后配置 Ingress 暴露出去。
嗯,到时候见。