环境准备:搭建你的K8s实验场
说实话,每次带新人做vLLM部署,最头疼的反而不是模型调优,而是环境搭建。我见过太多人在这一步卡壳——Docker装不上、Minikube起不来、kubectl连不上集群。嗯,今天我们就来把这几个坎儿一一踩平。
我个人习惯把环境准备分成四步走:容器运行时、本地集群、命令行工具、状态验证。咱们按这个顺序来,稳扎稳打。
第一步:安装Docker
Docker是整个实验的基石。vLLM的镜像、K8s的Pod,最终都跑在容器里。没有Docker,后面全是空中楼阁。
安装方式(以Ubuntu 22.04为例):
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
# 添加Docker官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动并验证
sudo systemctl start docker
sudo systemctl enable docker
sudo docker run hello-world
sudo usermod -aG docker $USER
newgrp docker
getenforce 的状态。
第二步:安装Minikube
为什么选Minikube而不是Kind?我个人觉得Minikube更接近真实集群体验——它有节点概念、有addons管理、还能模拟多节点。Kind虽然轻量,但有些网络行为跟真集群不太一样。
安装Minikube:
# 下载二进制
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
# 验证状态
minikube status
这里有个关键参数:--cpus=4 --memory=8192。vLLM跑大模型时,显存和内存都很吃紧。我建议至少给Minikube分配4核8G,否则后面跑推理时你会哭的。
第三步:安装kubectl与Helm
kubectl是K8s的瑞士军刀,Helm则是K8s的apt-get。这两个工具缺一不可。
安装kubectl:
# 下载最新版
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 安装
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 验证版本
kubectl version --client
安装Helm:
# 使用脚本安装
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
# 验证
helm version
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
第四步:验证K8s集群状态
环境装完了,怎么知道好不好使?别急,我有一套标准的「体检流程」。
1. 检查节点状态:
kubectl get nodes
# 输出应该类似:
# NAME STATUS ROLES AGE VERSION
# minikube Ready control-plane 5m v1.28.3
2. 检查系统Pod:
kubectl get pods -n kube-system
# 你会看到coredns、etcd、kube-apiserver等核心组件都在Running状态
3. 部署一个测试应用:
kubectl create deployment nginx-test --image=nginx
kubectl expose deployment nginx-test --port=80 --type=NodePort
kubectl get svc nginx-test
# 访问 http://$(minikube ip):$(NodePort) 应该能看到Nginx欢迎页
--image-mirror-country=cn。
4. 验证Helm可用性:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo bitnami/nginx
# 能正常搜索到Chart,说明Helm工作正常
环境检查清单
为了方便你对照检查,我整理了一个表格:
| 组件 | 验证命令 | 预期结果 |
|---|---|---|
| Docker | docker run hello-world |
打印Hello from Docker! |
| Minikube | minikube status |
host: Running, kubelet: Running, apiserver: Running |
| kubectl | kubectl cluster-info |
显示Kubernetes control plane地址 |
| Helm | helm list |
返回空列表(无报错) |
到这步,你的K8s实验环境就算搭好了。你想想看,从零到有一个能跑vLLM的集群,其实也就几条命令的事。后面我们就可以开始往集群里塞模型了。
最后提醒一句: 如果你用的是Windows或macOS,Docker Desktop自带Kubernetes功能,可以直接启用。但我个人还是推荐用Minikube,因为它更可控,出问题也好排查。