第2章:环境准备:Kubernetes 集群搭建(Minikube/K3s),安装 kubectl 与 Helm,配置本地开发环境

说实话,做 Service Mesh 和 vLLM 的实战,最怕什么?

最怕环境折腾半天,还没开始就劝退了。

我个人习惯是:本地先跑通,再上生产。所以这一章,咱们就把本地 Kubernetes 环境搭好。你不需要昂贵的云服务器,一台笔记本就够了。

2.1 选哪个?Minikube 还是 K3s?

这个问题我经常被问到。我的建议很简单:

  • 如果你在 macOS 或 Windows 上开发,用 Minikube。它模拟得最像真正的集群。
  • 如果你在 Linux 上,或者机器资源比较紧张(比如只有 4GB 内存),用 K3s。它轻量,启动快。

我在项目中遇到过一种情况:用 Minikube 跑得好好的,换到 K3s 发现某些 CNI 插件行为不一样。嗯,这其实不是 bug,是设计差异。所以我的建议是——你选一个用熟就行,后面课程我会同时兼容两种方式。

核心原则:本地环境只要能跑 kubectl get nodes 返回 Ready,就算成功。

2.2 安装 Minikube(推荐)

先装个 Docker,这是前提。然后一行命令搞定 Minikube:

# macOS (Intel)
brew install minikube

# macOS (Apple Silicon)
brew install minikube

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

# Windows (用 Chocolatey)
choco install minikube

启动集群:

minikube start --cpus=4 --memory=8192 --driver=docker

为什么给 8GB 内存?因为后面我们要跑 vLLM,它吃内存。你想想看,如果只给 2GB,模型加载到一半就 OOM 了,多尴尬。

小技巧:如果你用的是 Apple Silicon Mac,记得加上 --driver=docker,别用 hyperkit。我踩过这个坑,hyperkit 在 M1 上网络性能有问题。

2.3 安装 K3s(备选方案)

如果你选 K3s,更简单:

curl -sfL https://get.k3s.io | sh -

装完以后,kubectl 默认就有了。不过要注意,K3s 的 kubeconfig 在 /etc/rancher/k3s/k3s.yaml,你需要手动 export:

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

我曾经在生产环境用过 K3s 跑边缘节点,稳定性其实不错。但本地开发时,记得关掉 traefik 和 servicelb,不然端口冲突会让你抓狂:

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable=traefik,servicelb" sh -

2.4 安装 kubectl

kubectl 是 Kubernetes 的瑞士军刀。没有它,你寸步难行。

# macOS
brew install kubectl

# Linux
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

装完以后,配置自动补全:

# bash
source <(kubectl completion bash)

# zsh
source <(kubectl completion zsh)

我个人习惯把 kubectl 简写成 k,省时间:

alias k=kubectl
complete -o default -F __start_kubectl k

注意:kubectl 版本和集群版本不要差太多。我见过有人用 1.28 的客户端连 1.20 的集群,结果 apply 资源时报各种奇怪的 schema 错误。建议版本差不超过两个小版本。

2.5 安装 Helm

Helm 是 Kubernetes 的包管理器。后面部署 Istio、Prometheus、vLLM 都要靠它。

# macOS
brew install helm

# Linux
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

装完以后,加几个常用仓库:

helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

为什么要加 Bitnami?因为它的 chart 质量高,文档全。我在项目中遇到 Helm 安装失败,十有八九是用了那些没人维护的第三方 chart。

2.6 验证环境

跑几个命令,确认一切正常:

# 查看节点
kubectl get nodes

# 查看所有 Pod
kubectl get pods -A

# 测试 Helm 安装
helm install test nginx --repo https://charts.bitnami.com/bitnami --generate-name

如果看到 nginx pod 处于 Running 状态,恭喜你,环境搞定了。

我的经验:这一步别跳过。很多人装完环境直接开始部署,结果后面排查问题时才发现 kubectl 连不上集群。花 5 分钟验证,能省 2 小时 debug 时间。

2.7 知识体系总览

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

K8s 本地开发环境搭建流程 选择集群方案 Minikube(推荐) K3s(轻量备选) 安装 kubectl + Helm + 配置自动补全 ✅ 验证:kubectl get nodes

说白了,整个流程就是三步:选方案 → 装工具 → 验证。别想复杂了。

2.8 避坑指南

最后,分享几个我踩过的坑:

  • Docker 没启动:Minikube 启动失败,八成是 Docker Desktop 没打开。检查一下 docker ps 能不能跑。
  • 端口被占用:K3s 默认用 6443 端口,如果你本地有别的服务占用了,启动会失败。用 lsof -i :6443 查一下。
  • 磁盘空间不足:Minikube 默认用 20GB 虚拟磁盘,跑几个镜像就满了。启动时加 --disk-size=40g 解决。
  • 网络代理问题:如果你在公司内网,记得配置 HTTP_PROXY。我曾经折腾了一下午,最后发现是代理没配好。

终极建议:如果你实在不想折腾,直接用 Killercoda 的在线 K8s 环境。浏览器打开就能用,省去所有安装步骤。但说实话,本地环境还是建议自己搭一遍,后面调试会方便很多。


公众号:蓝海资料掘金营,微信deep3321