【最新】k8s中kubeflow(v1.0)部署全过程+踩坑全集(图文)

简述

Kubeflow是的机器学习工具包。Kubeflow是运行在K8S之上的一套技术栈,这套技术栈包含了很多组件,组件之间的关系比较松散,我们可以配合起来用,也可以单独用其中的一部分
在这里插入图片描述
Kubeflow提供了一大堆组件,涵盖了机器学习的方方面面

最主要的是以下几个

Operator:是针对不同的机器学习框架提供资源调度和分布式训练的能力(TF-Operator,PyTorch-Operator,Caffe2-Operator,MPI-Operator,MXNet-Operator);
Pipelines:是一个基于Argo实现了面向机器学习场景的流水线项目,提供机器学习流程的创建、编排调度和管理,还提供了一个Web UI。
Katib:是基于各个Operator实现的超参数搜索和简单的模型结构搜索的系统,支持并行搜索和分布式训练等。超参优化在实际的工作中还没有被大规模的应用,所以这部分的技术还需要一些时间来成熟;
Serving支持部署各个框架训练好的模型的服务化部署和离线预测。Kubeflow提供基于TFServing,KFServing,Seldon等好几种方案。由于机器学习框架很多,算法模型也各种各样。工业界一直缺少一种能真正统一的部署框架和方案。这方面Kubeflow也仅仅是把常见的都集成了进来,但是并没有做更多的抽象和统一

部署环境及要求

注意之前有很多文章都提到了使用ksonnet安装kubeflow,但是目前ksonnet即将停用,所以会出现yaml文件不支持的情况,这里的部署按照的是官方文档使用kfctl_k8s_istio的Kubeflow部署https://www.kubeflow.org/docs/started/k8s/kfctl-k8s-istio/
k8s version :1.14.6
保证一台工作节点 :4C
16G Memory
50G HD
这里用到的是阿里云服务器,建议使用云服务器,保证每个服务器都符合上述标准
下面开始正式部署,前提是k8s已搭建完毕,dns正常

部署

1.下载kfctl包和yaml文件

1.wegt https://github.com/kubeflow/kfctl/releases/tag/v1.0.2  这里建议翻墙下载到本地再上传
2.下载源码包(任选其一,将文件下载到/root/v1.0.2.tar.gz)
    wget https://github.com/kubeflow/manifests/archive/v1.0.2.tar.gz
    wget https://github.com/kubeflow/kfctl/archive/v1.0.2.tar.gz
3.下载 yaml 文件
   wget https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml
4.修改 kfctl_k8s_istio.v1.0.2.yaml 内容 
将 https://github.com/kubeflow/manifests/archive/v1.0.2.tar.gz 改为 file:///root/kubeflow/v1.0.2.tar.gz

2.apply yaml文件

这里有两中
1.tar -xvf kfctl_v1.0.2_<platform>.tar.gz
  export PATH=$PATH:"<path-to-kfctl>"
  export KF_NAME=<your choice of name for the Kubeflow deployment>
  export BASE_DIR=<path to a base directory>
  export KF_DIR=${BASE_DIR}/${KF_NAME}
  export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.0- 
  branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml"
  mkdir -p ${KF_DIR}
  cd ${KF_DIR}
  kfctl apply -V -f ${CONFIG_URI}
2.(release-i-search)'./':./ kfctl apply -V -f  kfctl_k8s_istio.v1.0.2.yaml

**注意这里的yaml都是修改以后的,在下面会详细介绍为什么**

在这里插入图片描述
在这里插入图片描述

3.阿里云构建拉取所需要的镜像

注意,这一步非常重要,如果是国内网的话是绝对拉不到的,找遍了全网也没有发现最新的镜像,只能通过阿里云镜像仓库来构建,在下面会仔细讲解,这里已经给大家准备好了镜像的Dockerfile
https://github.com/Eros11on/Dockerfile-library

gcr.io/kubeflow-images-public/ingress-setup:latest
gcr.io/kubeflow-images-public/admission-webhook:v1.0.0-gaf96e4e3
gcr.io/kubeflow-images-public/kubernetes-sigs/application:1.0-beta
argoproj/argoui:v2.3.0
gcr.io/kubeflow-images-public/centraldashboard:v1.0.0-g3ec0de71
gcr.io/kubeflow-images-public/jupyter-web-app:v1.0.0-g2bd63238
gcr.io/kubeflow-images-public/katib/v1alpha3/katib-controller:v0.8.0
gcr.io/kubeflow-images-public/katib/v1alpha3/katib-db-manager:v0.8.0
mysql:8
gcr.io/kubeflow-images-public/katib/v1alpha3/katib-ui:v0.8.0
gcr.io/kubebuilder/kube-rbac-proxy:v0.4.0
gcr.io/kfserving/kfserving-controller:0.2.2
metacontroller/metacontroller:v0.3.0
mysql:8.0.3
gcr.io/kubeflow-images-public/metadata:v0.1.11
gcr.io/ml-pipeline/envoy:metadata-grpc
gcr.io/tfx-oss-public/ml_metadata_store_server:v0.21.1
gcr.io/kubeflow-images-public/metadata-frontend:v0.1.8
minio/minio:RELEASE.2018-02-09T22-40-05Z
gcr.io/ml-pipeline/api-server:0.2.5
gcr.io/ml-pipeline/visualization-server:0.2.5
gcr.io/ml-pipeline/persistenceagent:0.2.5
gcr.io/ml-pipeline/scheduledworkflow:0.2.5
gcr.io/ml-pipeline/frontend:0.2.5
gcr.io/ml-pipeline/viewer-crd-controller:0.2.5
mysql:5.6
gcr.io/kubeflow-images-public/notebook-controller:v1.0.0-gcd65ce25
gcr.io/kubeflow-images-public/profile-controller:v1.0.0-ge50a8531
gcr.io/kubeflow-images-public/kfam:v1.0.0-gf3e09203
gcr.io/kubeflow-images-public/pytorch-operator:v1.0.0-g047cf0f
docker.io/seldonio/seldon-core-operator:1.0.1
gcr.io/spark-operator/spark-operator:v1beta2-1.0.0-2.4.4
gcr.io/spark-operator/spark-operator:v1beta2-1.0.0-2.4.4
gcr.io/spark-operator/spark-operator:v1beta2-1.0.0-2.4.4
gcr.io/google_containers/spartakus-amd64:v1.1.0
tensorflow/tensorflow:1.8.0
gcr.io/kubeflow-images-public/tf_operator:v1.0.0-g92389064
argoproj/workflow-controller:v2.3.0

在这里插入图片描述
在这里插入图片描述

4.创建pv

metadata-mysql.yaml minmo-pv.yaml mysql-pv.yaml
kubectl get pv,pvc -n kubeflow

在这里插入图片描述

5.修改各个deploy statefulset 的镜像下载策略

因为下载策略是Always ,需要修改为(imagePullPolicy后面值改为 IfNotPresent)
例子
#kubectl edit deploy deploy名字 -n kubeflow

部署成功

在这里插入图片描述

踩坑全集

1.报错Segmentation fault

在这里插入图片描述
一般这个错误有两种
一是内存,硬盘没有达到规定要求
二是kfctl命令有问题,建议重新下载kfctl压缩包,MD5查看是某损坏

2.使用ksonnet 时找不到yaml文件在这里插入图片描述

这是因为版本不一致导致的,目前根据官方解释ksonnet即将停用,所以不建议使用了
在这里插入图片描述

3.apply kfctl_k8s_istio.v1.0.2.yaml时一直卡着不动

这是因为墙的问题
在apply的时候一直卡着不动
这里我们采取将yaml中的 https://github.com/kubeflow/manifests/archive/v1.0.2.tar.gz 改为 file:///root/kubeflow/v1.0.2.tar.gz

这里一开始设想的是所需文件夹下载下来再apply,但是查看源码时发现,它会自动删除,这是在是个大坑
在这里插入图片描述

4.如何通过阿里云构建拉取镜像

这里一开始是因为拉取不了国外的镜像,翻墙也没有用,查了很久的资料才发现可以通过阿里云镜像仓库来构建,这个方法属实厉害,下面将介绍一下
1.进入阿里云镜像仓库,创建仓库,注意这里使用GitHub账号绑定,并选择海外机器构建
在这里插入图片描述
2.准备一个GitHub上的仓库用来放置你所需压的镜像Dockerfile文件,这里我已经给大家准备好了,可以自行提取
https://github.com/Eros11on/Dockerfile-library
在这里插入图片描述
3.进入阿里云仓库选择构建,添加规则
在这里插入图片描述
4.需要一个个手动添加,建议填写版本时将文件夹名也一并填上,:改成-,容易区分
在这里插入图片描述
5.在镜像版本里查看已构建的镜像
在这里插入图片描述

总结

这一次的kubeflow部署可谓是全程踩坑,查阅国内的资料大都是停留在19之前的,很少有最新版本的,加上kubeflow本身跟新迭代很快,版本稍不一致,就可能报错,还有国内的镜像少之又少,这一次花了很多时间来研究摸索了最新的部署,采了很多的坑,特此记录一下,但是这东西再过几个月又会及时更新,后续也会试着来更新这篇文章,最后如果有其他问题的话,可以留言或者在我的GitHub(https://github.com/Eros11on/Dockerfile-library)的issue中留言,一起学习

猜你喜欢

转载自blog.csdn.net/qq_46595591/article/details/107765833