Kubeflow1.6的搭建的示例使用

1 官方文档

根据kubeflow1.6官网发行记录,与k8s 1.22适配的kubeflow版本是kubeflow-1.6。当前最新版本是Kubeflow1.9,官方推荐使用的k8s版本是1.29。

部署步骤参考:部署kubeflow1.6的官方文档

以下操作来自笔者刚开始接触k8s时所做的操作,使用kubekey部署了k8s+ksp,一些操作也都依赖于图形化界面。经过一两个月的鼓捣研究最终跑通。

2 环境信息规划

本次基于k8s 1.22.10搭建kubeflow-1.6环境。k8s 1.22.10搭建在如下3台虚拟机上。

主机名 服务(用途) IP root用户密码 规格 系统盘 OS
master-1 master 10.13.31.60 cloud@2020 8c16g 300G Centos7.9
worker-1 worker 10.13.31.61 cloud@2020 8c16g 300G Centos7.9
worker-2 worker 10.13.31.62 cloud@2020 8c16g 300G Centos7.9

3 部署kubeflow 1.6环境

3.1 下载kubeflow-manifests1.6.1

1
2
3
4
5
6
7
8
[root@master01 ~]# mkdir /opt/installPkgs/install-kubeflow1.6
[root@master01 ~]# cd /opt/installPkgs/install-kubeflow1.6

[root@master01 install-kubeflow1.6]# wget https://github.com/kubeflow/manifests/archive/refs/tags/v1.6.1.tar.gz

#解压
[root@master01 install-kubeflow1.6]# tar -zxf v1.6.1.tar.gz
[root@master01 install-kubeflow1.6]# ll manifests-1.6.1/

3.2 下载kustomize3.2.0

1
2
3
4
5
6
[root@master01 manifests-1.6.1]# cd /opt/installPkgs/install-kubeflow1.6/
[root@master01 install-kubeflow1.6]# wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv5.0.3/kustomize_v5.0.3_linux_amd64.tar.gz
[root@master01 install-kubeflow1.6]# tar -zxf kustomize_v5.0.3_linux_amd64.tar.gz

[root@master01 install-kubeflow1.6]# chmod +x ./kustomize
[root@master01 install-kubeflow1.6]# cp -p kustomize /usr/local/bin

3.3 将gcr.io镜像替换成国内代理镜像

1
2
3
4
[root@master01 manifests-1.6.1]# cd /opt/installPkgs/install-kubeflow1.6/manifests-1.6.1/
#【很重要】gcr.io是谷歌官方的docker镜像仓储,访问需要翻墙。替换成其对应代理镜像
[root@master01 manifests-1.6.1]# sed -i "s/gcr.io/gcr.dockerproxy.com/g" `grep gcr.io -rl /opt/installPkgs/install-kubeflow1.6/manifests-1.6.1`
#以下分步安装,都是在以下目录执行命令:“/opt/installPkgs/install-kubeflow1.6/manifests-1.6.1/”

3.4 正式部署

1
2
3
#一键式安装【官方组件 (apps下) 与所有公共服务 (common下)】
[root@master01 manifests-1.6.1]# while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done
###执行完成后,大概需要一个小时的时间(笔者的情况是这样)来拉取相关镜像并启动所有的pod

3.5 开启https登录kubeflow UI

1
2
3
4
5
6
7
#参考文章:https://github.com/kubeflow/kubeflow/issues/5803

$ mkdir /opt/installPkgs/install-kubeflow/problem-cloud-not-found-CSRF-cookie
$ cd /opt/installPkgs/install-kubeflow/problem-cloud-not-found-CSRF-cookie

#首选检查当前k8s集群中是否存在名为“kubeflow-self-signing-issuer”的clusterissuers。
kubectl get clusterissuers -A
image-20250207094358148
1
#如果不存在的话,后面创建的certificate的类型将会是“Opaque”且名字后面会加一串随机字符串
image-20250207094434773
1
2
#如果不存在名为“kubeflow-self-signing-issuer”的clusterissuers,则执行以下命令创建(其中manifests-1.6.1即为kubeflow安装文件目录)
$ kubectl apply -f manifests-1.6.1/common/cert-manager/kubeflow-issuer/base/cluster-issuer.yaml
image-20250207094530311
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#创建两个文件gateways-issuer2.yaml、kf-istio-resources2.yaml
$ cat > gateways-issuer2.yaml <<EOF
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
name: kubeflow-ingressgateway-certs
namespace: istio-system
spec:
secretName: kubeflow-ingressgateway-certs
issuerRef:
kind: ClusterIssuer
name: kubeflow-self-signing-issuer
commonName: istio-ingressgateway.istio-system.svc
EOF

$ cat > kf-istio-resources2.yaml <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: kubeflow-gateway
namespace: kubeflow
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- "*"
port:
name: http
number: 80
protocol: HTTP
# Upgrade HTTP to HTTPS
# tls:
# httpsRedirect: true
- hosts:
- "*"
port:
name: https
number: 443
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: kubeflow-ingressgateway-certs
EOF
1
2
3
#应用上述两个文件
$ kubectl apply -f gateways-issuer2.yaml
$ kubectl apply -f kf-istio-resources2.yaml

3.6 获取kubeflow dashboard地址

以下两种方法选取其一

3.6.1 从kubesphere中获取

image-20250207094921952
image-20250207094932005
image-20250207094949498
image-20250207095007191

3.6.2 从命令行获取

1
kubectl -n istio-system get svc | grep istio-Ingressgateway

3.7 登录kubeflow dashboard

kubeflow1.6的web界面登录信息:

  • 默认用户名:user@example.com
  • 默认密码:12341234

3.8 minio-service配置

image-20250207095305437
image-20250207095323082
image-20250207095336459

默认用户名与密码:

  • accessKey: minio
  • secretKey: minio123

4 Tensorflow示例

kubeflow官方提供的、在kubeflow使用流水线执行tensorflow机器学习任务的例子:

https://github.com/kubeflow/pipelines/blob/master/samples/contrib/kubeflow-e2e-mnist/kubeflow-e2e-mnist.ipynb

5 Pytorch示例

5.1 示例1

1
2
3
4
5
6
7
8
9
#示例代码:
https://github.com/kubeflow/pipelines/tree/master/samples/contrib/pytorch-samples

#全按官方文档操作会报错,执行此示例请按以下步骤操作:
#(k8s集群内执行)Add Minio secret for KServe
$ mkdir -p /opt/installPkgs/install-kubeflow/Document_test/Components/Training_Operators/PyTorch-Training-PyTorchJob/pytorch-samples-from-kubeflow_pipeline

$ touch minio-secret.yaml
# minio-secret.yaml文件的内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ cat minio-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
annotations:
serving.kserve.io/s3-endpoint: minio-service.kubeflow:9000
serving.kserve.io/s3-usehttps: "0"
serving.kserve.io/s3-region: "minio"
serving.kserve.io/s3-useanoncredential: "false"
serving.kubeflow.org/s3-endpoint: minio-service.kubeflow:9000
serving.kubeflow.org/s3-region: minio
serving.kubeflow.org/s3-useanoncredential: "false"
serving.kubeflow.org/s3-usehttps: "0"
type: Opaque
data:
AWS_ACCESS_KEY_ID: bWluaW8=
AWS_SECRET_ACCESS_KEY: bWluaW8xMjM=
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: sa
secrets:
- name: mysecret
1
2
3
4
5
6
# Run the following command to set the secrets
$ kubectl apply -f minio-secret.yaml -n kubeflow-user-example-com

#Run the following command to disable sidecar injection $ kubectl label namespace kubeflow-user-example-com istio-injection=disabled --overwrite

#通过kubeflow UI(以下kubeflow环境应该是另外一个,所以相关端口号不一致。当时记录学习笔记时没注意前后文一致)创建notebook,使用的镜像如下。然后connect
image-20250207095725081
1
#在打开的JupterLab窗口中,打开一个 Terminal会话窗口
image-20250207095753536
1
2
#下载示例所在的git代码库
$ git clone https://github.com/kubeflow/pipelines.git
image-20250207095924924
1
2
3
4
#在如下链接中下载“EditThisCookie” chrome插件的安装文件,并安装到google浏览器中
#https://chrome.zzzmh.cn/info/fngmhnnpilhplaeedifhccceomclgfbg

#将kubeflow-pipelines-v2/samples/contrib/pytorch-samples/Pipeline-Cifar10.ipynb文件复制一份,操作复制得到的文件
image-20250207100006254
1
2
#因为我复制了两次,我现在编辑并执行Pipeline-Cifar10-Copy2.ipynb
#安装kfp==1.8.12这个python3库
image-20250207100038272
1
#使用“EditThisCookie” chrome插件获取https://172.24.0.31:30706/这个网站保存的cookie,获取其中的authservice_session这个key对应的value值,将value值保存到示例中的AUTH变量中:
image-20250207100136937
1
#(kubesphere中操作)将容器内的minio服务端口暴露出来
image-20250207100309327
1
#替换MINIO_ENDPOINT。TENSORBOARD_IMAGE也建议替换
image-20250207100344529
1
#~/kubeflow-pipelines-v2/samples/contrib/pytorch-samples/utils/generate_templates.py,需要修改这个文件如下两个变量,否则执行报错且不能实现既定功能
image-20250207100408891
1
#使用ptl_args变量的值
image-20250207100441336

5.2 示例2

此示例来自kubeflow官方示例pytorch-samples

bert机器学习基础知识:【理论篇】是时候彻底弄懂BERT模型了【实战篇】是时候彻底弄懂BERT模型了

创建的流水线任务“pytorch-bert”在执行Training步骤时会报错失败:

image-20250207151415759

问题解决办法:

原因:因为需要去huggingface这个美国公司的网站下载外网的数据,但是相关外网在大陆无法正常访问。

最后执行时,做如下修改

1
2
#修改generate_templates.py(下图是修改后的样子)
vi ~/kubeflow-pipelines/samples/contrib/pytorch-samples/utils/
image-20250207151607445
1
2
#修改如下文件,使用自己的容器镜像(下图是修改后的样子):
/home/jovyan/kubeflow-pipelines/samples/contrib/pytorch-samples/bert/template_mapping.json
image-20250207151701958
1
##执行Pipeline-Bert.ipynb时,如果k8s环境没有gpu就修改ptl_args变量的值,将gpu修改为cpu
image-20250207151725871

Kubeflow1.6的搭建的示例使用
https://jiangsanyin.github.io/2025/02/07/Kubeflow1.6的搭建的示例使用/
作者
sanyinjiang
发布于
2025年2月7日
许可协议