kubeflow的部署过程以及思路

kubeflow 部署

    • 日志
    • 前言
    • 1、环境文件准备
    • 2、修改参数
    • 3、开始安装
    • 4、推送镜像(“大型局域网”外可忽略)
    • 5、创建pv 持久化存储
    • 6、最后

日志

1月19日:
修复了一些错误,加入了一些阿里云的链接,希望路过的童鞋不顺路点一下,给一些动力,感谢
经多次验证,v0.5.1版本已可以安装,但是安装后还是还是会存在一些问题,我会近期尽量赶一个常见的修复说说明, 简单修改一下配置文件即可。

前言

  1. kubeflow是建立在kubernetes基础上,要求有功能完整的kubernetes,基础搭建可以参考本人另一个文档:
    ansible部署kubernetes过程
    阿里云
  2. 此外,kubeflow所用到的所有images均来源于“大型局域网”外面,顾需要提前准备好镜像,在正确的时候推入work节点。
  3. 教程具有时效性,有些images在当时是可以正确自动pull,但是后来因为某些原因无法自动pull,这样的情况要么从“大型局域网”外面重新pull,要么只能找到已经搭建好的集群去save镜像,
  4. 教程供大家参考,我会尽量写的详细,如有疑问请告知我,共同进步谢谢

——————————————分割线————————————————

1、环境文件准备

  1. 可用的kubernetes环境
  2. ks二进制文件,以及需要将ks设置在环境变量里面
    文件地址:链接:ks文件
    提取码:9ml4
    环境设置参考: 环境设置
    验证:键入ks,若出来提示则表示成功,无提示便是失败
  3. kubeflow文件

更新百度云连接,百度云里面已完成第二步修改参数,百度云
提取码:27o8

#建立一个kubeflow文件夹
mkdir kubeflow
#设置版本号
export KUBEFLOW_TAG=v0.4.1
#下载相关文件
curl https://raw.githubusercontent.com/kubeflow/kubeflow/${KUBEFLOW_TAG}/scripts/download.sh | bash
  1. kubeflow的images文件,百度云
    提取码:ee8u

——————————————分割线———————————————————————————

2、修改参数

  1. /kubeflow/katib/ 下的 studyjobcontroller.libsonnet
    /kubeflow/pipeline/ 下的所有pip开头的文件
    里面的imagePullPolicy后面值改为 “IfNotPresent” 注意大小写

注:此处修改是因为,kubeflow是google的项目,拉的镜像是“大型局域网”内没有的,需要从“大型局域网”外拉取。 此外其他的教程里面有人使用阿里云修改tag也可以实现。
若所搭建服务器可以实现科学上网,建议在work节点处于科学上网的环境下,这样修改参数这步可以跳过直接进行下一步安装

2.ambassador.libsonnet文件里面

selector: {
         service: "ambassador",
        },
 #注意一下一共有两个

下面的type后面参数改为 “NodePort” 此处主要是将kubeflow的内网端口映射到外网,以便开启外网的 web访问
更新: 此处仍然可以修改 ,没有修改也没事, 后期会告诉大家如何在安装好后重新映射端口出去

————————————————————分割线————————————————

3、开始安装

开始安装主要是3条命令

scripts/kfctl.sh init config --platform none
#生成配置文件

cd config
#进入文件夹

../scripts/kfctl.sh generate k8s
#注意,此处两条命令很容易因为网络或者其他原因写入失败
#需要rm -rf ks_app当前文件夹下的ks_app整个文件夹,然后继续执行 上一条命令
#此处运气不好可能会循环数十遍,运气好一次成功

../scripts/kfctl.sh apply k8s
#写入,也会出现上条出现的情况,重新执行即可,不用再删除文件夹

执行成功后会会创建若干 pod
ps :生成的ks文件夹里面有很多文件, 其中包括即将要创建的pod信息, 感兴趣的可以进去搜着看一下
——————————————————分割线————————————————

4、推送镜像(“大型局域网”外可忽略)

准备好下载好的镜像包,上传到work节点,执行.sh文件

#chmod +x auto.sh
#./auto.sh
#此处脚本更新, 需要自行建立.sh将以下的脚本拷贝进去

#/bin/bash
for img in $(ls | grep tar.gz)
do
docker load < $img
done

刚刚将镜像拉去方式由“一直”, 改为了如果本地存在就从本地拉去, 这样解决了无法从“大型局域网”外拉去镜像
ps:
后来有部分人询问这块,这块有两点需要注意一下, 一个是"auto.sh" 是我自己写的一个脚本,没有啥复杂的,就是把镜像load在节点。
另一个是 load 的位置是在work节点,前言里面已经提到,这点images是pod所需要的,pod最后都是被分配在work节点,所以这点镜像是work节点所需要的
另外,严格的说:如果你的work节点在2个以上, 你所get 到的pod 是分布在不同的节点上的,只是此处为了方便才给每一个节点推送全部的images , 但是如果到了实际的过程中, work节点过了4个以上, 给每一个节点推images是一种很浪费资源的方法, 大家可以尝试自己搭建仓库或者其他方法去解决一下~

此时查询

kubectl get pod -n kubeflow

发现仍然存在几个等待状态的pod ,是因为这几个pod是数据库,需要创建持久化pv,便可

——————————————————————分割线——————————————————

5、创建pv 持久化存储

  1. 用vim 创建文件,然后将以下内容写入(共有三个)
vizier-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: vizier-pv2
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/pv1"
#hostPath是本地目录的意思,持久化存储还可以部署在具有写权限的nfs服务器中

mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/pv2"

minmo-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: minmo-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/pv3"

  1. 然后创建三个持旧化存储
kubectl create -f  vizier-pv.yaml
kubectl create -f  mysql-pv.yaml
kubectl create -f  minmo-pv.yaml
  1. 稍等5分钟左右,所有的pod便可以runing状态了

6、最后

查询pod状态用get pod

kubectl get pod -n kubeflow

查询端口将pod 改为svc

kubectl get svc -n kubeflow

查询端口状态以及内部ip

kubectl get pod -n kubeflow -o wide

注意:
1、非常抱歉没有图片展示,本人尽可能的用文字表述清楚,如果有疑问随时评论,意见或者建议也可以写在下面。
2、所有教程具有时效性,但是道理不变,例如基础三个镜像,在本人4月份搭建的时候还可以使用,6月份也无法从“大型局域网”内自动拉去,所以本人从其他的搭建好的集群save了一个,以后可能还可能存在其他镜像之前可以自动拉,之后无法拉的,去“大型局域网”外拉一个就可以了。
3、有科学上网的是最好的 ,可以省掉最麻烦的找镜像的步骤。(要求时work节点科学上网)
4、出来的kubeflow0.5.1了, 部署原理是一样的,因为新版本的pod更多了,所以需要更改更多的“镜像本地拉取”,然后去”大型局域网“外save回来的镜像更多了,目前找到的需要修改的地方
········1、 /kubeflow/katib 下的 studyjobcontroller.libsonnet
··········/kubeflow/pipeline 下的所有pip开头的文件
··········/kubeflow/jupyter/notebook_controller.libsonnet
··········/kubeflow/jupyter/jupyter-web-app.libsonnet
(jupyter-web-app 修改会出错, 可以在创建完成后修改)

··········/kubeflow/profiles
里面的imagePullPolicy后面值改为 “IfNotPresent” 注意大小写
········ 2、5.1的镜像地址,和当时”大型局域网“外服务器下载的脚本
…链接:https://pan.baidu.com/s/1ZeV5PU9Ny_-FlBq3yWfTuw
…提取码:g0tj
…~~这个0.5.1由于时间原因没有 auto.sh,大家需要自己手动load一下,建议脚本批量load ~~
更新:
新增加几个已找到的需要修改为“IfNotPresent”的,这次应该是比较其了,如果后面有漏掉的可以用kubectl edit 来编辑,这个命令是可以安装完成后使用的
另外,增加了两个kubeflow所需要的镜像,这次的kubeflow v0.5.1应该是更全了

感谢大家,辛苦的看完了全文,相互学习哈, 有啥需要修改的及时联系

另外,云服务器选型有疑问的可以联系本人

你可能感兴趣的:(kubeflow)