1、课程导学与环境准备:vLLM与Kubernetes概述、课程目标、前置知识要求、实验环境搭建

大家好,欢迎来到这门课。我是你们的讲师,一个在AI运维和Kubernetes领域摸爬滚打了七八年的老工程师。今天咱们要聊的,是怎么把vLLM这个大模型推理框架,稳稳当当地跑在Kubernetes上。

说实话,我刚开始接触大模型部署那会儿,踩的坑真不少。模型跑不起来、显存爆了、请求超时……这些问题我几乎都遇到过。后来慢慢摸索出一套方法论,今天分享给你。

1.1 vLLM与Kubernetes:为什么是它们?

先说说vLLM。它是个高性能的大模型推理引擎,核心优势就两个:。快,是因为它用了PagedAttention技术,显存利用率高得吓人;省,是因为它支持连续批处理,能把GPU的算力榨干。

我有个项目,之前用HuggingFace的Transformers直接部署,QPS(每秒查询数)只有20。换成vLLM后,同样的硬件,QPS直接飙到150。你想想看,这差距有多大?

再说Kubernetes。它是个容器编排平台,说白了就是帮你管理一堆服务器,让它们像一台电脑一样工作。在大模型场景下,Kubernetes能帮你做三件事:

  • 自动扩缩容:流量大了自动加实例,流量小了自动减,省成本
  • 故障自愈:某个Pod挂了,Kubernetes会自动重启,不用你半夜爬起来
  • 资源调度:GPU这种稀缺资源,Kubernetes能精确分配,避免浪费

嗯,这里要注意:vLLM + Kubernetes的组合,不是简单的1+1。它需要你理解两者的特性,才能发挥最大效能。这也是这门课要解决的核心问题。

核心观点:vLLM解决的是模型推理的性能问题,Kubernetes解决的是服务运维的可靠性问题。两者结合,才能构建生产级的大模型服务。

1.2 课程目标:学完你能做什么?

这门课不是讲理论,是讲实战。学完之后,我希望你能做到:

  1. 独立搭建环境:用Minikube或Kind,在本地跑起一个Kubernetes集群
  2. 部署vLLM服务:把一个大模型(比如Llama、Qwen)部署到Kubernetes上,对外提供API
  3. 配置自动扩缩容:根据请求量,自动调整vLLM实例的数量
  4. 监控与调优:用Prometheus和Grafana监控推理性能,找到瓶颈并优化
  5. 处理常见故障:OOM(内存溢出)、GPU显存不足、请求超时……这些坑我带你一个个填平

我个人习惯,每节课都会留一个动手实验。你跟着做一遍,比看十遍视频都管用。

1.3 前置知识要求:你需要会什么?

这门课有一定门槛,但不高。你需要具备以下基础:

知识领域 具体要求 备注
Linux基础 会基本的命令行操作(cd、ls、vim等) 如果不会,建议先花2小时学一下
Docker基础 知道什么是容器,会写Dockerfile 我会在课程中简单回顾
Python基础 能看懂简单的Python代码 vLLM的API调用需要用到
Kubernetes基础 了解Pod、Service、Deployment等核心概念 如果你完全零基础,建议先看官方入门教程

我的建议:如果你Kubernetes基础比较薄弱,别担心。我会在每节课前用5分钟回顾相关概念。但Docker和Linux基础,你得自己补一补。

1.4 实验环境搭建:Minikube vs Kind

工欲善其事,必先利其器。咱们先搭环境。本地跑Kubernetes,主流方案有两个:Minikube和Kind。

Minikube:它会在你的电脑上创建一个虚拟机,然后在虚拟机里跑Kubernetes。优点是功能完整,支持各种特性;缺点是资源占用大,启动慢。

Kind:它用Docker容器来模拟Kubernetes节点。优点是轻量、启动快;缺点是对某些高级特性支持不够好。

我个人更推荐Kind,原因有三:

  • 启动快,30秒就能拉起一个集群
  • 资源占用小,2核4G的笔记本也能跑
  • 和CI/CD环境一致,方便后续集成

当然,如果你需要用到NodePort、LoadBalancer等特性,Minikube会更合适。咱们这门课主要用Kind,但我会在附录里给出Minikube的配置方法。

注意:无论用哪种方案,请确保你的电脑至少有4核CPU、8GB内存、20GB可用磁盘空间。如果条件允许,建议用16GB内存以上的机器。

1.5 安装kubectl和Helm

环境搭好了,还得装两个工具:kubectl和Helm。

kubectl是Kubernetes的命令行工具,所有操作都靠它。安装很简单:

# Linux/Mac
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 version --client

Helm是Kubernetes的包管理器,类似apt或yum。用它安装vLLM会方便很多:

# 安装Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# 验证安装
helm version

我曾经遇到过一个问题:kubectl版本和Kubernetes集群版本不匹配,导致某些命令执行失败。所以建议你安装最新版的kubectl,或者至少保证版本差异在±1以内。

1.6 启动你的第一个Kubernetes集群

好,现在咱们用Kind启动一个集群。先安装Kind:

# 安装Kind
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

# 创建集群配置文件
cat <<EOF > kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
EOF

# 启动集群
kind create cluster --config kind-config.yaml

启动成功后,你会看到类似这样的输出:

Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:v1.27.3) 🖼
 ✓ Preparing nodes 📦 📦 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:

kubectl cluster-info --context kind-kind

嗯,这里要注意:如果你用的是Windows,建议用WSL2来运行这些命令。原生Windows对容器支持不太好,容易出问题。

验证集群状态:

kubectl get nodes
# 应该看到3个节点,状态都是Ready

小技巧:如果你觉得每次都要输入kubectl太麻烦,可以设置别名:alias k=kubectl。我用了好几年,效率提升不少。

1.7 验证Helm和kubectl配置

最后,咱们验证一下Helm能不能正常工作:

# 添加一个测试仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# 安装一个测试应用(比如nginx)
helm install test-nginx bitnami/nginx

# 查看Pod状态
kubectl get pods

# 卸载测试应用
helm uninstall test-nginx

如果一切顺利,说明你的环境已经准备好了。接下来,咱们就可以正式进入vLLM的部署环节了。

说实话,环境搭建这一步最枯燥,但也是最重要的。我见过太多人因为环境没配好,后面学得一头雾水。所以,请务必跟着步骤走一遍,有问题随时在群里问我。


好了,这一章的内容就到这里。环境搭好了,下一章咱们就开始部署vLLM。到时候我会手把手带你写第一个Deployment YAML文件。

公众号:蓝海资料掘金营,微信 deep3321