3、Kubeflow安装:使用kfctl部署Kubeflow、验证安装、访问Kubeflow Dashboard
好,咱们直接进入正题。这一章,我带你亲手把Kubeflow装起来。
说实话,Kubeflow的安装方式有好几种。我个人最常用的是kfctl,也就是官方提供的命令行工具。为什么选它?因为可控性强,出了问题你知道去哪查。我见过有人用一键脚本装完,结果Pod全挂,连日志都找不到——那才叫崩溃。
3.1 安装前的准备工作
别急着敲命令。先检查你的环境。Kubeflow对Kubernetes版本有要求,我踩过这个坑。
你需要准备:
- 一个运行中的Kubernetes集群(建议至少4核16G,3个Worker节点)
- kubectl已配置好,能正常访问集群
- kfctl二进制文件(去GitHub Releases下载对应版本)
- 集群有默认的StorageClass(用于PVC)
嗯,这里要注意:如果你用的是云厂商的托管集群(比如EKS、AKS、GKE),默认就有StorageClass。但如果你是自己用kubeadm搭的,记得先装一个,比如NFS或者Rook。
3.2 下载并配置kfctl
先下载kfctl。我习惯把它放到/usr/local/bin,方便全局调用。
# 下载kfctl v1.5.1(以Linux amd64为例)
wget https://github.com/kubeflow/kfctl/releases/download/v1.5.1/kfctl_v1.5.1-0-g9c9f9c9_linux.tar.gz
# 解压
tar -xvf kfctl_v1.5.1-0-g9c9f9c9_linux.tar.gz
# 移动到PATH
sudo mv ./kfctl /usr/local/bin/
验证一下:
kfctl version
# 输出类似:kfctl v1.5.1-0-g9c9f9c9
看到版本号,说明装好了。如果报错,检查一下PATH或者文件权限。
3.3 使用kfctl部署Kubeflow
部署过程其实就三步:生成配置、修改配置、应用配置。我刚开始也觉得复杂,后来发现套路很固定。
先创建一个工作目录:
mkdir ~/kubeflow-deploy
cd ~/kubeflow-deploy
然后生成默认配置:
kfctl init my-kubeflow --config=https://raw.githubusercontent.com/kubeflow/manifests/v1.5-branch/kfdef/kfctl_k8s_istio.v1.5.1.yaml
这个命令会拉取一份YAML配置文件。说白了,它告诉kfctl要装哪些组件:Istio、Knative、KFServing、Jupyter Notebook等等。
接着,进入目录看看:
cd my-kubeflow
ls -la
# 你会看到 kfctl.yaml 和 kustomize 文件夹
我个人习惯先检查一下kfctl.yaml,确认版本和组件列表没问题。比如,如果你不需要KFServing,可以在这里删掉对应的块。
最后,执行部署:
kfctl apply -V -f kfctl.yaml
加上-V参数,可以看到详细日志。这一步会花10-20分钟,取决于你的网络和集群性能。我建议你泡杯咖啡,或者去刷会儿手机。
kfctl apply -V -f kfctl.yaml 即可,它是幂等的。我遇到过三次断网,每次都重跑一遍就过了。
3.4 验证安装
部署完成后,别急着访问Dashboard。先检查Pod状态。
kubectl get pods -n kubeflow
你会看到一堆Pod,大概30-40个。重点关注这几个:
| Pod名称 | 命名空间 | 作用 |
|---|---|---|
| centraldashboard-xxx | kubeflow | 中央控制面板 |
| ml-pipeline-xxx | kubeflow | 机器学习流水线 |
| jupyter-web-app-xxx | kubeflow | Jupyter Notebook管理 |
| istio-ingressgateway-xxx | istio-system | 外部流量入口 |
所有Pod都应该是Running或Completed状态。如果有CrashLoopBackOff或者Pending,别急,先看日志:
kubectl logs -n kubeflow <pod-name>
我遇到过最常见的问题是PVC绑定失败。检查一下StorageClass:
kubectl get sc
# 确保有默认的StorageClass,标记为(default)
如果没有默认的,手动指定一个:
kubectl patch storageclass <your-storage-class> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
3.5 访问Kubeflow Dashboard
Pod都跑起来了,接下来就是访问Dashboard。Kubeflow默认通过Istio Ingress Gateway暴露服务。
先找到Ingress Gateway的外部IP:
kubectl get svc -n istio-system istio-ingressgateway
输出类似:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
istio-ingressgateway LoadBalancer 10.96.123.45 192.168.1.100 80:31380/TCP,443:31390/TCP
把EXTERNAL-IP复制到浏览器,加上https://前缀。比如:https://192.168.1.100
第一次访问,会看到登录页面。默认用户名和密码是:
- 用户名:
admin@kubeflow.org - 密码:
12341234
登录成功后,你就看到Kubeflow Dashboard了。左边有导航栏,包括Pipelines、Notebooks、Experiments等模块。
我个人建议先点开Notebooks,创建一个Jupyter Notebook试试。如果能在Notebook里跑通一个简单的Python脚本,说明整个环境是通的。
3.6 避坑指南
安装过程中,我遇到过几个典型问题,分享给你:
- Pod一直Pending:多半是资源不够。检查集群节点是否有足够的CPU和内存。我曾经在2核4G的节点上装Kubeflow,结果Istio的Pod全挂。
- Dashboard打不开:检查Ingress Gateway的Service类型。如果是
NodePort,需要用节点IP加端口访问。如果是LoadBalancer,等云厂商分配公网IP。 - 登录后白屏:浏览器缓存问题。清一下缓存,或者用无痕模式重试。
- kfctl是官方推荐的部署方式,可控性强
- 部署前检查K8s版本和StorageClass
- 部署后验证Pod状态,重点关注centraldashboard和ml-pipeline
- 通过Istio Ingress Gateway访问Dashboard
好了,装完Kubeflow只是第一步。接下来,你可以在Dashboard里探索各个模块。我个人觉得,先玩转Notebooks和Pipelines,这两个是最常用的。