2. 环境准备:部署Kubernetes集群、安装Helm、配置kubectl

好,咱们正式开始动手。这一章的目标很明确——把Kubernetes集群跑起来,装上Helm,配好kubectl。说白了,就是给vLLM模型部署搭好舞台。我个人习惯先用minikube做本地验证,再考虑生产环境用kubeadm。你想想看,如果本地都跑不通,上生产也是白搭。

2.1 选择集群部署方式:kubeadm vs minikube

这两种方式我都用过,说说我的感受。

特性 kubeadm minikube
适用场景 生产环境、多节点集群 本地开发、单节点测试
资源消耗 较高,需要多台机器 较低,一台笔记本就能跑
安装复杂度 中等,需要手动配置网络插件 简单,一条命令启动
持久化存储支持 原生支持,需配置StorageClass 支持,但需要额外驱动

我在项目中遇到过这样的情况:用minikube验证好的PV/PVC配置,到了kubeadm集群上因为StorageClass没配好,折腾了半天。所以我的建议是——本地用minikube快速迭代,生产环境老老实实用kubeadm。

2.2 使用minikube部署本地集群

如果你只是想快速体验vLLM的持久化存储,minikube是最省事的。嗯,这里要注意:minikube的版本和Kubernetes版本要匹配,否则会出一些莫名其妙的错。

# 安装minikube(Linux/macOS)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动集群,指定Kubernetes版本和资源
minikube start --kubernetes-version=v1.28.0 --cpus=4 --memory=8192

# 验证集群状态
kubectl get nodes

我曾经因为没给minikube分配足够的内存,导致vLLM模型加载时直接OOM。8GB内存是底线,如果你要跑7B以上的模型,建议16GB起步。

小技巧:minikube启动后,会自动配置kubectl的上下文。如果你本地有多个集群,记得用 kubectl config use-context minikube 切换。

2.3 使用kubeadm部署生产级集群

生产环境我推荐kubeadm。它不花哨,但稳定。说白了,Kubernetes官方维护的工具,社区支持最好。

先在所有节点上安装容器运行时和kubeadm:

# 安装containerd(所有节点)
sudo apt-get update
sudo apt-get install -y containerd

# 安装kubeadm、kubelet、kubectl(所有节点)
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

然后初始化控制平面节点:

# 在master节点执行
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

接下来安装网络插件。我习惯用Flannel,简单可靠:

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
避坑指南:我曾经在生产环境遇到过Pod跨节点通信失败的问题,折腾了两天才发现是Flannel的CIDR和节点网段冲突。初始化时一定要确认 --pod-network-cidr 和你的物理网络不重叠。

2.4 安装Helm——Kubernetes的包管理器

Helm这东西,说白了就是Kubernetes的apt-get。没有它,你部署vLLM得写几十个YAML文件,有了它,一条命令搞定。

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

# 验证安装
helm version

# 添加常用仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable https://charts.helm.sh/stable
helm repo update

我个人习惯把Helm的版本和Kubernetes版本对应起来。Helm 3.x兼容Kubernetes 1.16以上版本,但如果你用Kubernetes 1.28,建议Helm 3.12+。

2.5 配置kubectl——你的集群遥控器

kubectl配置好了,你才能跟集群对话。这里有几个我常用的配置技巧:

  1. 自动补全——省时间利器
  2. 别名设置——少敲几个字母
  3. 多集群切换——本地测试和生产环境来回切
# 启用kubectl自动补全
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

# 设置别名
alias k='kubectl'
alias kg='kubectl get'
alias kd='kubectl describe'
alias kdel='kubectl delete'

# 查看当前上下文
kubectl config current-context

# 切换上下文
kubectl config use-context minikube
核心要点:配置好kubectl后,一定要用 kubectl cluster-info 验证集群连通性。如果返回了集群信息,说明环境准备就绪。

2.6 验证环境——确保一切就绪

环境搭好了,咱们跑个快速验证:

# 检查节点状态
kubectl get nodes

# 检查系统Pod
kubectl get pods -n kube-system

# 测试Helm
helm list

# 创建一个测试Pod
kubectl run test-pod --image=nginx --restart=Never
kubectl get pods

如果所有节点都是Ready状态,系统Pod都在运行,Helm能正常列出chart,那恭喜你——环境准备完成了。

我记得有一次帮同事排查问题,他卡在kubectl命令报错上,最后发现是KUBECONFIG环境变量指向了错误的文件。所以,如果你遇到类似问题,先检查 echo $KUBECONFIGcat ~/.kube/config

2.7 本章知识体系

下面这张图帮你理清本章的核心逻辑:

环境准备:Kubernetes集群部署流程 集群部署 Helm安装 kubectl配置 minikube(本地开发) kubeadm(生产环境) 安装Helm 3.x 添加Chart仓库 自动补全配置 多集群切换 验证:kubectl cluster-info 三个环节缺一不可,验证通过后才能进入vLLM部署阶段

环境准备是基础中的基础。集群没搭好,后面所有关于持久化存储、vLLM模型部署的讨论都是空中楼阁。我个人建议你花点时间把这一步做扎实,后面会省很多事。