3、Kubeflow安装:使用kfctl部署Kubeflow、验证安装、访问Kubeflow Dashboard

好,咱们直接进入正题。这一章,我带你亲手把Kubeflow装起来。

说实话,Kubeflow的安装方式有好几种。我个人最常用的是kfctl,也就是官方提供的命令行工具。为什么选它?因为可控性强,出了问题你知道去哪查。我见过有人用一键脚本装完,结果Pod全挂,连日志都找不到——那才叫崩溃。

3.1 安装前的准备工作

别急着敲命令。先检查你的环境。Kubeflow对Kubernetes版本有要求,我踩过这个坑。

⚠️ 重要提醒: Kubeflow 1.5 要求 Kubernetes 1.21 以上。如果你用的是1.19或更低,安装会直接失败。我曾经在客户现场折腾了俩小时,最后发现是集群版本太老。

你需要准备:

  • 一个运行中的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都应该是RunningCompleted状态。如果有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

⚠️ 注意: 默认是HTTPS,但证书是自签名的。浏览器会提示不安全,直接点「高级」→「继续前往」即可。生产环境记得换正式证书。

第一次访问,会看到登录页面。默认用户名和密码是:

  • 用户名: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,这两个是最常用的。

Kubeflow 安装流程(kfctl) 环境准备 K8s集群 + kfctl 生成配置 kfctl init 应用部署 kfctl apply 验证 Pod状态 失败 → 检查日志/配置 访问 Dashboard https://EXTERNAL-IP 登录使用 admin@kubeflow.org / 12341234 成功路径 失败回退

专注资料整理