一、什么是kubeflow?
以下是来自Kubeflow的官网翻译:
Kubeflow项目致力于使机器学习(ML)工作流在Kubernetes环境达到部署简单,可移植且可扩展的目的。Kubeflow的目标不是重新创建其他服务,而是提供一种直接的方式来将机器学习(ML)的同类最佳的开源系统部署到各种Kubernetes环境的基础结构中。Kubeflow项目希望在运行Kubernetes的任何地方,您都应该能够轻松、快速的运行Kubeflow。
二、TKE环境准备
1、创建一个1.18版本的TKE集群
按照TKE官方参考文档,创建好集群。
NT:注意这里安装Kubeflow需要特殊开启部分APIserver的自定义参数,而TKE的托管集群不支持修改APIserver参数,所以这里我们需要创建独立集群,以方便后续自定义我们的环境。
2、准备Kubeflow的运行环境
APIserver开启对TokenRequest特性的支持。在APIserver的启动参数(配置文件路径:/etc/kubernetes/manifest/kube-apiserver.yaml)中加上
代码语言:javascript复制--service-account-signing-key-file=/etc/kubernetes/ca.key
# /etc/kubernetes/ca.key为TKE集群证书key所在路径
--service-account-issuer=kubernetes.default.svc
# kubernetes.default.svc可自行修改
为所有组件(APIserver、kube-controller-manager、kube-scheduler、kube-proxy、kubelet)开启TokenRequest特性。在各组件的启动参数加上
代码语言:javascript复制--feature-gates=TokenRequest=true
# kube-controller-manager、kube-scheduler的配置文件路径为/etc/kubernetes/manifest
# kube-proxy 修改仅需要kubectl edit daemonset kube-proxy -n kube-system然后在启动参数加上即可
# kubelet 通过systemctl status kubelet查看kubelet的配置文件具体路径(master节点和node节点路径有出入),然后在配置文件中加上对应配置随后重启即可。
三、部署Kubeflow
这里安装的版本为v1.2.0。后续有出入自行调整。
1、下载kfctl工具
代码语言:javascript复制wget https://github.com/kubeflow/kfctl/releases/download/v1.2.0/kfctl_v1.2.0-0-gbc038f9_linux.tar.gz
# 资源的链接为:https://github.com/kubeflow/kfctl/releases
2、部署前准备
代码语言:javascript复制# 1、准备好kfctl工具
tar -xvf kfctl_v1.2.0-0-gbc038f9_linux.tar.gz && mv kfctl /usr/local/bin
# 2、准备安装目录
export KF_NAME=<用来放Kubeflow deployment yaml配置的文件目录>
export BASE_DIR=<path to a base directory>
export KF_DIR=${BASE_DIR}/${KF_NAME}
# 配置yaml资源URL
export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.2-branch/kfdef/kfctl_k8s_istio.v1.2.0.yaml"
3、开始部署Kubeflow
代码语言:javascript复制mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl apply -V -f ${CONFIG_URI}
4、查看是否部署成功
代码语言:javascript复制kubectl -n kubeflow get all
# 如果有部分pod异常,可以kubectl describe排查下具体错误原因。
四、部署遇到的问题总结
1、更改/etc/kubernetes/manifest/kube-apiserver.yaml配置文件报错
部署过程中经常遇到修改各组件配置文件报错的问题,但是配置反复确认是没问题的。最终排查为配置中格式存在问题,所以建议在配置过程中尽量参考官方文档的配置,避免配置出错。
2、部署过程中发下有相关DB的pod启动失败
原因为准备测试集群环境是node节点全部在一个可用区(硅谷一区),而storageclass使用的可用区为硅谷二区。导致申请pv的时候失败。建议后续在准备node的时候混合可用区,保持高可用性。
3、部署使用的镜像均为国外镜像
考虑到国内网络环境,这边测试时选择了国外环境(硅谷地域)的集群来避免此问题。国内用户可以将镜像提前下载转移到国内的镜像仓库,然后修改部署配置中的镜像地址来部署Kubeflow。