Kubeflow更新升级到0.4.1

Kubeflow是面向Kubernetes集群基础设施的机器学习服务组件。kubeflow采用ksonnet进行软件包管理和部署的,与其它的应用采用Helm的机制有较大的不一样。从2018年设立至今,kubeflow项目发展迅速,目前为0.4.1版本,与以前版本的变化比较大,原来的一些安装和使用方法(参考《Kubeflow 使用指南》)须要进行调整。这里主要记录了使用kubeflow 0.4.1版本的过程。linux

一、准备工做

获取 ksonnet的最新版本(目前为0.13.1),脚本以下:git

echo ""
echo "============================================================"
echo "cd ~/openthings"
cd ~/openthings
echo ""

#https://github.com/ksonnet/ksonnet/releases/download/v0.13.1/ks_0.13.1_linux_amd64.tar.gz
echo "wget ksonnet 0.13.1 and untar......"
echo ""
wget -c https://github.com/ksonnet/ksonnet/releases/download/v0.13.1/ks_0.13.1_linux_amd64.tar.gz
tar -vxf ks_0.13.1_linux_amd64.tar.gz
cd ks_0.13.1_linux_amd64
echo ""

echo "Copy ks to /usr/local/bin......"
sudo cp ks /usr/local/bin
echo ""
echo "============================================================"
echo "Please visit https://my.oschina.net/u/2306127/blog/1808582"
echo "============================================================"
echo ""

获取kubeflow版本:github

export KUBEFLOW_SRC=/home/supermap/openthings/kubeflow-src

mkdir ${KUBEFLOW_SRC}
cd ${KUBEFLOW_SRC}
export KUBEFLOW_TAG=v0.4.1

curl https://raw.githubusercontent.com/kubeflow/kubeflow/${KUBEFLOW_TAG}/scripts/download.sh | bash

二、初始化kubeflow项目

ksonnet是一个通用的软件包管理工具(参考《ksonnet 使用教程 》)。下一步,经过ksonnet为kubeflow建立一个初始项目,而后在里面添加相关的软件包。docker

  • 系统文档方法,使用kfctl脚本。
export KUBEFLOW_SRC=/home/supermap/openthings/kubeflow-src
export KFAPP=kubeflow
export KUBEFLOW_DOCKER_REGISTRY=registry.aliyuncs.com

${KUBEFLOW_SRC}/scripts/kfctl.sh init ${KFAPP} --platform none
cd ${KFAPP}
${KUBEFLOW_SRC}/scripts/kfctl.sh generate k8s
${KUBEFLOW_SRC}/scripts/kfctl.sh apply k8s

推荐的方法如上,但我在使用时老是报错,没有成功地运行起来。api

而后改为手动方式,不使用kfctl的脚本。浏览器

  • 直接初始化My kubeflow,添加pkg。
ks init my-kubeflow
cd my-kubeflow

VERSION=v0.4.1
ks registry add kubeflow github.com/kubeflow/kubeflow/tree/${VERSION}/kubeflow

ks pkg install kubeflow/jupyter@${VERSION}
ks pkg install kubeflow/tf-serving@${VERSION}
ks pkg install kubeflow/tf-training@${VERSION}
  • 注意,原来低版本的core已经没有了。查看完整的包列表使用命令 ks pkg list

添加过程当中,会出现github访问的rate limit问题,参考《git访问github的rate limit问题解决》。bash

设置当前环境的namespace,对应于kubernetes集群中的命名空间:app

NAMESPACE=kubeflow
kubectl create namespace ${NAMESPACE}
ks env set ${KF_ENV} --namespace ${NAMESPACE}
  • 注意,其中的KF_ENV为ksonnet定义的部署环境,这里直接设为default。

三、生成Kubernetes的配置和部署

查看一下当前的环境:框架

ks env list

建立k8s配置,以jupyter为例。curl

ks generate jupyter jupyter --name=jupyter

应用k8s配置,将jupyterhub部署到kubernetes集群中,命名空间为kubeflow。

ks apply ${KF_ENV} -c jupyter

查看一下kubernetes集群的部署状况:

kubectl get all -n kubeflow

输出结果为:

NAME            READY   STATUS    RESTARTS   AGE
pod/jupyter-0   1/1     Running   0          69m

NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/jupyter-0    ClusterIP      None            <none>        8000/TCP       69m
service/jupyter-lb   LoadBalancer   10.103.161.57   10.1.1.13     80:31822/TCP   69m

NAME                       READY   AGE
statefulset.apps/jupyter   1/1     69m

四、Jupyter服务访问

jupyter-lb service的访问,须要将其设为NodePort或者LoadBalancer。

kubectl edit svc/service/jupyter-lb -n kubeflow

修改里面的服务类型,我这里安装了MetalLB,因此使用LoadBalancer模式。

五、存储的访问

缺省状况下,工做镜像使用supermap-workspace为存储pvc的名称,其中supermap为个人登陆用户名。

我这里计划使用GlusterFS分布式存储系统做为存储服务。

首先,建立一个endpoint,对应于多个gluster。将下面内容保存为yaml,修改后经过kubectl apply -f 执行:

apiVersion: v1
kind: Endpoints
metadata:
  name: glusterfs-gvzr00
  namespace: kubeflow
subsets:
- addresses:
  - ip: 10.1.1.193
  - ip: 10.1.1.234
  - ip: 10.1.1.205
  - ip: 10.1.1.112
  ports:
  - port: 10000
    protocol: TCP

而后,建立一个pv(物理存储卷)。将下面内容保存为yaml,修改后经过kubectl apply -f 执行:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: kubeflow-supermap
  namespace: kubeflow
spec:
  capacity:
    storage: 8000Gi
  accessModes:
    - ReadWriteMany
  glusterfs:
    endpoints: "glusterfs-gvzr00"
    path: "gvzr00"
    readOnly: false

而后,建立一个pvc(物理存储卷请求)。将下面内容保存为yaml,修改后经过kubectl apply -f 执行:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: supermap-workspace
  namespace: kubeflow
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 4000Gi

检查一下,pvc是否已经bound成功。

六、启动JupyterHub的工做Pod

JupyterHub中选择Start Server,选择镜像为gcr.io/kubeflow-images-public/tensorflow-1.12.0-notebook-cpu:v0.4.0。

但该镜像不可下载,能够从其它地方下载,脚本以下:

## 添加Tag for registry.cn-hangzhou.aliyuncs.com/openthings

MY_REGISTRY=registry.cn-hangzhou.aliyuncs.com/openthings

MY_IMAGE_CPU=tensorflow-1.12.0-notebook-cpu:v0.4.0
MY_IMAGE_GPU=tensorflow-1.12.0-notebook-gpu:v0.4.0

## Push镜像
## Tag to original docker iamges name.

echo ""
echo "1. tensorflow-1.12.0-notebook-cpu"
echo "PULL: ${MY_REGISTRY}/kubeflow-images-public-${MY_IMAGE_CPU}"
docker pull ${MY_REGISTRY}/kubeflow-images-public-${MY_IMAGE_CPU}
docker tag ${MY_REGISTRY}/kubeflow-images-public-${MY_IMAGE_CPU} gcr.io/kubeflow-images-public/${MY_IMAGE_CPU} 

echo ""
echo "2. tensorflow-1.12.0-notebook-gpu"
echo "PULL: ${MY_REGISTRY}/kubeflow-images-public-${MY_IMAGE_GPU}"
docker pull ${MY_REGISTRY}/kubeflow-images-public-${MY_IMAGE_GPU}
docker tag ${MY_REGISTRY}/kubeflow-images-public-${MY_IMAGE_GPU} gcr.io/kubeflow-images-public/${MY_IMAGE_GPU}

echo ""
echo "FINISHED."
echo ""

下载,基础资源已经准备好。

若是工做Pod被分配到其它节点,就在该节点运行上面的脚本获取镜像,必需要对应。

打开浏览器,输入 http://10.1.1.13:80,而后输入用户名为supermap和本身的密码,就能够进入jupyterhub系统了。

点击 Start server启动本身的工做台。

七、GlusterFS访问的权限问题

在启动工做pod时,遇到不断重启的问题,查看日志显示无写入权限。

首先,检查GlusterFS的ACL访问权限,以下:

supermap@podc01:~/gvzr00$ getfacl /home/supermap/gvzr00
getfacl: 从绝对路径名尾部去除" / "字符。
# file: home/supermap/gvzr00
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

修改GlusterFS权限设置,步骤以下:

mkdir /home/supermap/gvzr00
sudo mount -t glusterfs 10.1.1.201:/gvzr00 /home/supermap/gvzr00
  • 改变访问权限。
    • 我这里授予全部用户的读写执行权限,生产环境根据须要进行设置。
    • 下面的o::rwx中,o表明其余用户(没有明确用户名的),rwx为读写执行权限。
sudo setfacl -m o::rwx /home/supermap/gvzr00
  • 查看权限。注意other的权限从r-x变为了rwx。
supermap@podc01:~/gvzr00$ getfacl /home/supermap/gvzr00
getfacl: 从绝对路径名尾部去除" / "字符。
# file: home/supermap/gvzr00
# owner: root
# group: root
user::rwx
group::r-x
other::rwx

若是还有其它的存储访问权限问题,解决线索以下:

八、更多参考

相关文章
相关标签/搜索