环境准备:搭建你的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
我的小建议: 记得把当前用户加入docker组,不然每次都要sudo,很烦人。
sudo usermod -aG docker $USER
newgrp docker
我曾经踩过的坑: 有一次在CentOS上装Docker,忘了关SELinux,结果容器网络死活不通。排查了半天才发现是SELinux策略拦截了。如果你在生产环境,记得检查 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,否则后面跑推理时你会哭的。

核心逻辑图: 下面这张图展示了我们整个环境准备的知识体系。
环境准备知识体系 K8s实验环境 Docker容器运行时 Minikube本地集群 kubectl命令行 Helm包管理 镜像管理 容器运行 集群启动 Addons管理 资源管理 日志查看 Chart部署 ✅ 集群状态验证

第三步:安装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
一个小技巧: 我习惯给kubectl配自动补全,省得每次敲长命令。
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欢迎页
我曾经遇到的一个问题: 有次Minikube启动后,kubectl get nodes一直显示NotReady。排查发现是容器镜像拉不下来——因为公司内网需要配置代理。解决办法是给Docker配了镜像加速器,或者在Minikube启动时指定 --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,因为它更可控,出问题也好排查。


专注资料整理