前言:公司研发需要机器学习的相关技术栈做推荐使用,于是第一次开始涉足kubeflow、tensorflow、YoutubeDNN等。(ML:Machine learning)
环境
centos7.5
k8s v1.20.5
docker 19.03.15
复制代码
安装
建议参考官方文档:https://www.kubeflow.org/docs/started/k8s/kfctl-k8s-istio/
wget https://github.com/kubeflow/kfctl/releases/download/v1.2.0/kfctl_v1.2.0-0-gbc038f9_linux.tar.gz
tar -xf kfctl_v1.2.0-0-gbc038f9_linux.tar.gz
mv kfctl /usr/sbin
创建目录(自定义):mkdir -p /letv/kubeflow/kf-test
export PATH=$PATH:/usr/sbin/kfctl
export KF_NAME=kf-test
export BASE_DIR=/letv/kubeflow
export KF_DIR=${BASE_DIR}/${KF_NAME}
export CONFIG_FILE=${KF_DIR}/kfctl_k8s_istio.v1.2.0.yaml
cd /letv/kubeflow/kf-test
kfctl apply -V -f ${CONFIG_FILE}
kubectl -n kubeflow get all
复制代码
创建pv
上面通过kfctl apply创建kubeflow的一大堆pod时,目前碰到俩问题:
- gcr.io镜像无法下载,
解决办法是给服务器挂代理,本文结束..
我用的办法是本地梯子下载好后,传给harbor,然后在用服务器下载harbor的一大堆镜像; 或者参考其他办法:
通过阿里云下载gcr.io镜像
- 创建pv和pvc;有四个pvc需要绑定(katib-mysq、metadata-mysql、minio-pvc、mysql-pv-claim)
我用的办法是创建pv和pvc的yaml文件,用的NFS,举例一个:
root@vm-10-124-65-248 ~/test/kubeflow/PV$ cat PV_katib-mysql.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
labels:
name: pv-katib-mysql
name: pv-katib-mysql
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 10Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: katib-mysql
namespace: kubeflow
nfs:
path: /letv/nfs_kubeflow/data/v1/katib-mysql/
server: 10.124.65.247
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
复制代码
root@vm-10-124-65-248 ~/test/kubeflow/PV$ cat PVC_katib-mysql.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app.kubernetes.io/component: katib
app.kubernetes.io/name: katib-controller
name: katib-mysql
namespace: kubeflow
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
volumeMode: Filesystem
volumeName: pv-katib-mysql
复制代码
还有的pod提示镜像sha256的问题,我这里解决办法是编辑对应ns下的deploy,删除里面image最后的一串sha256即可:kubectl edit deploy activator -n knative-serving
Dashboard
masterip:31380
首次进入dashboard会让创建一个命名空间,之后比方像Notebook Servers所创建的pod都在该命名空间下。
运行Notebook Servers
请先参考:aws.amazon.com/cn/blogs/ch…
这里说一下我遇到的一个坑:使用Notebook Servers创建一个测试模型时,也需要创建pv和pvc,否则模型数据不会保留;但是我创建好后,pod依然失败了,kubectl logs查看竟然提示/home/jovyan无权限,原因就是NFS创建的PV没权限导致,这里直接把NFS的挂载路径给了777,问题解决..
Notebook Servers运行custom image
在kubeflow的dashboard上运行Notebook Servers时,可以选择自定义镜像,举例:
于是我尝试用tensorflow镜像运行,创建后pod果然有问题,describe排查提示docker login有权限问题?继续研究:
原因是因为缺少sa(serviceAccount)配置导致:
- kubeflow需要权限去pull镜像,这里没有对应的pull权限
- 于是再其namespace下创建了一个secret,该secret是专为docker registry的认证信息准备的,我这里是叫myregistry
- 虽然创建了secret,但是kubeflow界面创建的应用是statefulsets应用,该statefulsets里指定了一个sa: default-editor
- 这个sa:default-editor里原来没有指定任何secret,指定即可(myregistry)
- statefulsets正常运行起来。