环境准备:搭建你的第一个本地 K8s 集群

说实话,很多初学者一上来就被「集群」两个字吓住了。其实说白了,咱们现在要做的,就是在你手头的这台电脑上,模拟出一个迷你版的 Kubernetes 环境。我当年刚接触 K8s 时,也是从这一步开始的。别怕,跟着我来,半小时内你就能跑起来。

选择你的武器:Minikube 还是 Kind?

这两个工具都能帮你快速搭建本地集群。我个人更倾向于根据场景来选择:

  • Minikube:适合需要完整 K8s 体验的场景。它会在你的电脑上启动一个虚拟机,里面跑着完整的 K8s 集群。我在项目中用它来测试复杂的网络策略和存储卷挂载。
  • Kind:轻量级选手。它把 K8s 节点跑在 Docker 容器里。启动速度快,资源占用少。我平时做快速原型验证时,首选 Kind。

我的建议:如果你是第一次接触 K8s,从 Minikube 开始。它更像一个「真正的」集群,能让你体验到更多细节。等你熟悉了,再试试 Kind 的轻快。

安装 Minikube

嗯,这里要注意一下系统差异。我以 Linux/macOS 为例,Windows 用户请用 WSL2。

# 下载 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

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

😄  minikube v1.32.0 on Ubuntu 22.04
✨  Using the docker driver based on existing profile
👍  Starting control plane node minikube in cluster minikube
🏄  Done! kubectl is now configured to use "minikube" cluster

小技巧:如果启动失败,八成是 Docker 没装好或者资源不够。我曾经在 4GB 内存的笔记本上硬跑 Minikube,结果卡得怀疑人生。建议至少分配 2 个 CPU 和 4GB 内存。

安装 Kind

如果你选择 Kind,安装更简单:

# 使用 Go 安装
go install sigs.k8s.io/kind@latest

# 或者用 Homebrew(macOS)
brew install kind

# 创建集群
kind create cluster --name vllm-cluster

Kind 的启动速度真的快,十几秒就能搞定。我经常用它来做 CI/CD 的测试环境。

安装 kubectl:你的集群遥控器

kubectl 是操作 K8s 集群的命令行工具。没有它,你就像没有方向盘的车。

# 下载最新版本
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

# 赋予执行权限并移动到 PATH
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

# 验证安装
kubectl version --client

安装完成后,试试能不能和集群通信:

# 查看集群节点
kubectl get nodes

# 如果是 Minikube,会自动配置上下文
# 如果是 Kind,也会自动配置

避坑指南:我曾经遇到过 kubectl 版本和集群版本不匹配的问题。kubectl 的版本可以比集群高一个次要版本,但最好不要低。建议保持 kubectl 为最新稳定版。

配置 Docker 与 GPU 支持

咱们要跑 vLLM 推理服务,GPU 是绕不开的。说白了,没有 GPU,大模型推理慢得像蜗牛爬。

安装 Docker

# Ubuntu 系统
sudo apt-get update
sudo apt-get install docker.io

# 启动 Docker 并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 将当前用户加入 docker 组(避免每次 sudo)
sudo usermod -aG docker $USER
# 重新登录终端生效

配置 NVIDIA Container Toolkit

这一步很关键。Docker 默认不认识 GPU,需要安装 NVIDIA 的插件。

# 添加 NVIDIA 的仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

# 安装
sudo apt-get update
sudo apt-get install -y nvidia-docker2

# 重启 Docker 服务
sudo systemctl restart docker

# 验证 GPU 是否被识别
docker run --rm --gpus all nvidia/cuda:12.0-base nvidia-smi

验证成功标志:如果看到 GPU 的详细信息(型号、显存、驱动版本),说明配置成功。我见过有人卡在这一步,最后发现是 NVIDIA 驱动没装好。记得先跑 nvidia-smi 确认驱动正常。

让 Minikube 也能用 GPU

如果你用的是 Minikube,还需要额外配置:

# 启动时指定 GPU 支持
minikube start --driver=docker --gpus all

# 或者对已有集群启用
minikube addons enable nvidia-gpu-device-plugin

嗯,这里有个坑。Minikube 的 GPU 支持依赖 Docker 驱动。如果你用的是 VirtualBox 驱动,那就没法直通 GPU 了。我建议直接用 Docker 驱动,省心。

验证整个环境

最后,我们来确认一切就绪:

# 1. 检查集群状态
kubectl cluster-info

# 2. 检查节点
kubectl get nodes -o wide

# 3. 检查 GPU 节点(如果有)
kubectl describe node | grep -i gpu

如果一切正常,你会看到集群信息、节点状态,以及 GPU 相关的标签。

我的习惯:每次搭建新环境后,我都会跑一个简单的 Pod 来测试。比如 kubectl run test --image=nginx,确认调度和网络都正常。这一步能帮你提前发现很多隐藏问题。

本章知识体系

下面这张图帮你理清今天搭建的各个组件之间的关系:

本地 K8s 环境架构图 硬件层 CPU 内存 GPU (NVIDIA) 容器运行时层 Docker NVIDIA Container Toolkit K8s 集群层 Minikube Kind 管理工具:kubectl

从下往上看,硬件层提供算力,容器运行时层让 Docker 能调用 GPU,K8s 集群层负责编排调度,最后我们用 kubectl 来指挥一切。每一层都依赖下一层正常工作。

好了,环境准备就到这里。你现在应该有一个能跑起来的本地 K8s 集群,并且 Docker 也能识别 GPU 了。下一章我们会真正开始部署 vLLM 推理服务,到时候这些准备工作就会派上用场。


专注资料整理