3. 环境准备:在本地搭建MiniKF或Kind集群
说实话,很多人在学Kubeflow时,第一步就被环境卡住了。
我自己带团队做MLOps落地时,发现一个规律:环境搞不定,后面全是纸上谈兵。所以这一章,咱们就踏踏实实把本地环境搭起来。你不需要昂贵的云资源,一台普通笔记本就够了。
3.1 两种方案,怎么选?
我推荐两种本地方案:MiniKF 和 Kind集群。它们各有千秋,我分别说说。
| 特性 | MiniKF | Kind集群 |
|---|---|---|
| 安装复杂度 | 低(一键部署) | 中(需手动配置) |
| 资源占用 | 约4GB内存 | 约2GB内存起 |
| Kubeflow版本 | 预置完整版 | 可自定义安装 |
| 适合场景 | 快速体验、教学 | 开发调试、定制化 |
我个人习惯:新手先用MiniKF,半小时就能跑起来。等熟悉了,再换Kind玩更高级的配置。
3.2 方案一:MiniKF —— 最快上手
MiniKF是Google官方出的轻量版Kubeflow。说白了,它把Kubeflow打包成了一个虚拟机镜像,你只要跑起来就行。
3.2.1 前置条件
- 一台64位电脑(Windows/Mac/Linux都行)
- 至少8GB内存(我建议16GB,不然跑起来有点喘)
- VirtualBox 6.0以上版本
- Vagrant 2.2以上版本
3.2.2 安装步骤
嗯,这里要注意:先装VirtualBox,再装Vagrant。顺序反了可能会报错。
# 1. 创建项目目录
mkdir minikf-lab
cd minikf-lab
# 2. 初始化Vagrant环境
vagrant init aronchick/minikf
# 3. 启动虚拟机(这一步会下载镜像,约2GB)
vagrant up
# 4. 等几分钟后,访问Kubeflow Dashboard
# 浏览器打开:http://localhost:8080
3.2.3 验证安装
启动后,你会看到Kubeflow的中央仪表盘。我一般先检查三个东西:
- Notebook服务器 —— 能不能创建Jupyter Notebook
- Pipeline列表 —— 有没有预置的示例Pipeline
- Katib —— 超参数调优组件是否在线
如果这三个都正常,恭喜你,环境搭好了。
3.3 方案二:Kind集群 —— 更灵活
MiniKF虽然方便,但有个问题:它是个黑盒。你很难调整里面的组件。如果你想像我一样,想自己控制Kubeflow的每个细节,那就用Kind。
3.3.1 什么是Kind?
Kind = Kubernetes in Docker。它用Docker容器模拟Kubernetes节点。你想想看,一台笔记本上就能跑一个完整的K8s集群,多爽。
3.3.2 安装Kind集群
# 1. 安装Kind(Mac/Linux)
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
# 2. 创建集群配置文件
cat <<EOF > kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
EOF
# 3. 启动集群
kind create cluster --config kind-config.yaml --name kubeflow-cluster
# 4. 验证集群
kubectl cluster-info --context kind-kubeflow-cluster
3.3.3 在Kind上安装Kubeflow
集群跑起来后,就可以装Kubeflow了。我推荐用Kubeflow Manifests方式安装:
# 1. 下载Kubeflow Manifests
git clone https://github.com/kubeflow/manifests.git
cd manifests
# 2. 安装(这一步比较久,约10-15分钟)
while ! kustomize build example | kubectl apply -f -; do
echo "Retrying to apply resources..."
sleep 10
done
# 3. 检查所有Pod是否Running
kubectl get pods -n kubeflow
为什么用while循环?因为Kubeflow组件之间有依赖关系,一次apply可能失败。重试几次就好了。这是我在实际项目中总结出来的经验。
3.4 核心逻辑:两种方案对比
为了让你更直观地理解,我画了一张图:
3.5 避坑指南
我踩过的坑,你就不用再踩了。这里列几个常见的:
🔴 坑1:端口冲突
MiniKF默认用8080端口。如果你本地已经跑了其他服务(比如Jenkins),就会冲突。解决办法:修改Vagrantfile中的端口映射。
# 在Vagrantfile中修改
config.vm.network "forwarded_port", guest: 8080, host: 8888
🔴 坑2:内存不足
我曾经在一台8GB内存的笔记本上跑MiniKF,结果系统直接卡死。后来发现MiniKF默认分配4GB内存给虚拟机。如果你的电脑内存紧张,可以调小一点:
# 在Vagrantfile中设置
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
end
🔴 坑3:Kind集群网络问题
Kind集群内部网络和宿主机是隔离的。如果你想从宿主机访问Kubeflow Dashboard,需要做端口转发:
# 将集群内的8080端口转发到本地
kubectl port-forward -n istio-system svc/istio-ingressgateway 8080:80
3.6 验证环境是否就绪
不管用哪种方案,最后都要做一次全面检查。我一般跑这个脚本:
#!/bin/bash
echo "=== 检查Kubeflow环境 ==="
# 1. 检查集群状态
kubectl cluster-info
# 2. 检查命名空间
kubectl get ns | grep kubeflow
# 3. 检查关键Pod
kubectl get pods -n kubeflow | grep -E "central-dashboard|ml-pipeline|katib"
# 4. 检查Dashboard是否可访问
curl -s -o /dev/null -w "%{http_code}" http://localhost:8080
echo "=== 检查完成 ==="
如果所有检查都通过,说明你的环境已经准备好了。接下来,我们就可以正式开始Kubeflow的实战之旅了。
📌 我的建议: 如果你时间充裕,两种方案都试试。先用MiniKF感受一下Kubeflow的全貌,再用Kind集群深入理解每个组件。这样学下来,你对MLOps的理解会扎实很多。
公众号:蓝海资料掘金营,微信deep3321