第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 知识体系总览
下面这张图,帮你理清本章的核心逻辑:
说白了,整个流程就是三步:选方案 → 装工具 → 验证。别想复杂了。
2.8 避坑指南
最后,分享几个我踩过的坑:
- Docker 没启动:Minikube 启动失败,八成是 Docker Desktop 没打开。检查一下 docker ps 能不能跑。
- 端口被占用:K3s 默认用 6443 端口,如果你本地有别的服务占用了,启动会失败。用 lsof -i :6443 查一下。
- 磁盘空间不足:Minikube 默认用 20GB 虚拟磁盘,跑几个镜像就满了。启动时加 --disk-size=40g 解决。
- 网络代理问题:如果你在公司内网,记得配置 HTTP_PROXY。我曾经折腾了一下午,最后发现是代理没配好。
终极建议:如果你实在不想折腾,直接用 Killercoda 的在线 K8s 环境。浏览器打开就能用,省去所有安装步骤。但说实话,本地环境还是建议自己搭一遍,后面调试会方便很多。
公众号:蓝海资料掘金营,微信deep3321