2. 环境准备:K8s集群搭建(Minikube/Kind)、kubectl配置、Helm安装
好,咱们正式开始动手了。
这一章说白了就是搭台子。你想想看,后面我们要用 ConfigMap 管理 vLLM 的参数,总得有个 K8s 集群跑起来吧?我个人习惯是,本地开发用 Minikube 或者 Kind,简单、轻量、不折腾。今天我就把这两种方式都给你捋一遍,顺便把 kubectl 和 Helm 也配好。
2.1 选择你的本地集群工具
先说说 Minikube 和 Kind 的区别。Minikube 是官方维护的,它会在你的机器上启动一个真正的单节点集群,支持很多特性,比如 LoadBalancer、Ingress、Dashboard。Kind 呢,是用 Docker 容器来模拟节点,启动速度更快,资源占用更少。
我个人建议:如果你机器内存大于 8G,用 Minikube;如果只有 4G 或者想快速验证,用 Kind。我在项目中遇到过,有些同事用 Minikube 跑 vLLM 推理任务,因为内存不够导致 OOM,后来换成 Kind 加上资源限制才搞定。
2.2 安装 Minikube
安装 Minikube 其实就三步:下载、启动、验证。我习惯用二进制安装,干净利落。
# 下载 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
kubectl get nodes
嗯,这里要注意:--cpus=4 --memory=8192 这两个参数很关键。vLLM 推理任务对 CPU 和内存要求不低,尤其是加载模型的时候。我曾经因为只给了 2G 内存,结果 Pod 一直 CrashLoopBackOff,查了半天才发现是 OOM。
2.3 安装 Kind
Kind 的安装更简单,因为它就是一个 Go 二进制文件。而且 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 --name vllm-cluster
# 验证
kubectl cluster-info --context kind-vllm-cluster
你看,Kind 的配置非常灵活。上面我创建了一个控制平面节点加两个工作节点的集群。不过说实话,本地跑 vLLM 推理,单节点就够了,多节点反而增加资源开销。
kind export kubeconfig --name vllm-cluster 来确保配置正确。
2.4 配置 kubectl
kubectl 是操作 K8s 的瑞士军刀。不管你用 Minikube 还是 Kind,最终都要通过 kubectl 来管理资源。
安装 kubectl 也很简单:
# 下载最新版 kubectl
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
# 配置自动补全(我强烈建议开启)
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
配置好之后,你可以用 kubectl config view 查看当前上下文。如果你同时有 Minikube 和 Kind 的集群,可以用 kubectl config use-context 切换。
vllm-dev、vllm-test。这样切换的时候不会搞混。另外,kubectl get pods -A 是我用得最多的命令,没有之一。
2.5 安装 Helm
Helm 是 K8s 的包管理器。后面我们要用 Helm 来部署 vLLM 和配置 ConfigMap,所以这一步不能省。
安装 Helm 有三种方式:二进制、脚本、包管理器。我推荐用脚本安装,最省事:
# 使用官方脚本安装 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
# 添加常用仓库(比如后面要用到的 vllm 仓库)
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
安装完成后,你可以用 helm list 查看已部署的 release。刚开始可能什么都没有,别急,后面我们会用 Helm 部署 vLLM。
2.6 验证环境
最后,我们来验证一下整个环境是否就绪。我写了一个简单的检查脚本,你可以直接跑:
#!/bin/bash
echo "=== 检查 kubectl ==="
kubectl version --client && echo "kubectl OK" || echo "kubectl FAIL"
echo "=== 检查集群 ==="
kubectl cluster-info && echo "集群连接 OK" || echo "集群连接 FAIL"
echo "=== 检查节点 ==="
kubectl get nodes && echo "节点状态 OK" || echo "节点状态 FAIL"
echo "=== 检查 Helm ==="
helm version && echo "Helm OK" || echo "Helm FAIL"
如果全部通过,恭喜你,环境准备完毕!
minikube start 再跑上面的脚本。Kind 的话,确保集群已经创建。我曾经犯过这种低级错误——脚本跑完发现集群没启动,白忙活一场。
2.7 本章知识体系
下面这张图帮你梳理了本章的核心逻辑:从选择工具到最终验证,每一步都是环环相扣的。
这张图从左到右展示了我们的准备流程:先选工具(Minikube 或 Kind),然后配置 kubectl 和 Helm,最后统一验证。每一步都有对应的命令和注意事项,你跟着做就行。
好了,环境准备就到这里。下一章我们会正式进入 ConfigMap 的世界,看看怎么用它来管理 vLLM 的推理参数。到时候你会觉得,今天搭的这套环境,真值。