kubeflow初探(二):kubeflow安装

kubeflow安装

环境

kubernetes

在安装kubeflow之前需要先确定kubernetes的版本,因为kubeflow中用到的k8s API在一些新版本中改变了使用的方式,如果想无障碍的安装,需要在官方脚本中查看使用了什么API,又是在k8s的哪个版本弃用的。最方便的做法是看官方使用哪个版本的k8s进行测试的,保持和官方一样的版本准没错。此外若是有特殊要求,如旧版本k8s有漏洞且只能通过更新k8s版本修补的话,就只能先办法修改kubeflow源码了。
我的工作进行时,是kubeflow1.14.1版本。而在这个版本中,kubeflow使用了大量的k8s测试版API,要求k8s版本需介于1.17 ~ 1.21之间。(kubeflow1.13好像是需要k8s版本介于1.17 ~ 1.19)

kustomize

官方的manifest是按照kustomize安装文件结构进行编写的,因此安装也需要用kustomize。目前要求kustomize3.x版本,4.x版本会有bug。k8s1.14之后将kustomize集成进了k8s,因此在安装好k8s后,就直接可以用kustomize了。

其他

kubeflow中间用到了minio和sql,因此一定要用存储sc(storageclass)。因此上需要有有pvc卷,要么用ceph、HDFS等等,要么用nfs,最起码要使用本地存储,因为我只有一台服务器,因此使用了本地存储,我使用了rancher的local-path-storage。
因为我们的kubeflow服务,主要是面向机器学习、深度学习的,大家都是基于GPU部署,因此想要让k8s其中的服务驱动起GPU服务,需要在k8s中安装GPU插件,用来连接k8s中的容器化服务与GPU驱动,NVIDIA官方已经提供了解决方案(此处我跳过了nvidia-docker2的安装及docker相关的修改),如仅需k8s的NVIDIA插件,可以摸我。

kubeflow安装

安装资源

kubeflow的官方资源是实时更新的,建议安装时首选release版本,release有问题再用master分支。

但是,事情绝没有那么简单。kubeflow的官方资源中包含大量gcr.io的镜像资源引用。gcr.io是谷歌官方的docker镜像仓储,因此上不出意外国内是pull不到这些镜像的(有办法让服务器上外网的除外)。因此上,安装kubeflow的第一个困难,是网络。
我将kubeflow官方的代码clone了下来,并对安装过程中所有需要用到的gcr.io进项进行了阿里云备份,因此上,使用我改装过的kubeflow manifest安装文件,可以实现在国内愉快的安装。

安装步骤

按照官方的一键安装或分步安装即可。

一键安装命令

while ! kubectl kustomize example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done

分步安装命令参考官方。

由于我对每个模块均进行了调试,因此我是用的单步安装。需要提出的是,代码有可能有bug,如在执行过程中,出现

error: unable to recognize "STDIN": no matches for kind "Image" in version "caching.internal.knative.dev/v1alpha1"

这是knative安装过程中出现的bug,根据网上提供的解决方案,执行

kubectl apply -f ./patch/knative_serving_releases_download_v0.17.1_serving-crds.yaml

如出现

error: unable to recognize "STDIN": no matches for kind "CompositeController" in version "metacontroller.k8s.io/v1alpha1"

这个问题是在启动pipeline组件时文件顺序执行太快了,没有等待CRD服务创建好就开始进行引用,把pipeline创建组件的明令再执行一遍。

补丁

按照官方安装方式,安装好后会出现jupyter启动不起来,PVC无法创建等问题,查看日志会提示认证权限不够,会提示如下错误

Could not find CSRF cookie XSRF-TOKEN in the request. http://xx.xx.x.xxx/jupyter/api/namespaces/kubeflow-user/notebooks

其根本原因是每个component中启用了https认证,但是istio却没有启用https网关。因此解决思路有两种

  1. 关闭每个component中的https认证,尤其是在调试时
  2. 启用istio https网关
    为了直接使用,在此将istio网关设为https。可以参考这个issue。

你可能感兴趣的:(docker,kubernetes,容器)