-
Notifications
You must be signed in to change notification settings - Fork 691
平台单机部署
- docker == 20.x docker 存储目录>1T
- kubernetes = 1.21
- kubectl == 1.24
- nfs/ceph等分布式文件系统 挂载到每台机器的 /data/k8s/ (单机可忽略)
- 数据库接口地址 mysql,没有可忽略使用cube-studio自带的
- 单机 磁盘>=1000G 单机磁盘容量要求不大,仅做镜像容器的的存储
- 控制端机器 cpu>=16 mem>=32G
- 任务端cpu/gpu机器 根据需要自行配置,gpu安装对应厂商的要求安装好机器驱动
- IB/RDMA网络 自动安装机器驱动和IB卡
- 系统 ubuntu 20.04 或者centos7或者centos8,linux内核>=4.14
平台完成部署之后如下:

1、分布式存储,挂载到/data/k8s目录下。
nfs分布式存储示例:参考cube-studio/install/kubernetes/nfs
2、私有镜像仓库,在每台机器的docker配置中添加Insecure Registries
参考:cube-studio/install/harbor
3、gpu机器要安装nvidia-docker2,gpu机器安装对应的驱动,IB设备也需要安装对应的驱动
参考:cube-studio/install/rancher
可以参考视频,先使用rancher部署k8s,再部署cube-studio
平台部署命令:
将k8s集群的kubeconfig文件复制到install/kubernetes/config文件中,对于双网卡的同学,记得rancher里面current-context切换为内网的连接形式,然后执行如下命令,其中xx.xx.xx.xx为机器内网的ip(不是外网ip)
# 在k8s worker机器上执行
sh start.sh xx.xx.xx.xx
需要先把需要的镜像拉取到内网docker仓库,再从内网docker仓库拉取到机器上。
其他的同第一步或第二步
将infra命名空间下deployment拉取策略改为IfNotPresent,同时修改配置文件中IMAGE_PULL_POLICY为IfNotPresent
1、将cube-studio源码目录拷贝到/data/k8s/kubeflow/global/目录下面
cp -r cube-studio /data/k8s/kubeflow/global/
2、将cube-studio/aihub/modelscope/下内容拷贝到deep-learning目录下
cp -r cube-studio/aihub/modelscope/* /data/k8s/kubeflow/global/cube-studio/aihub/deep-learning/
3、修改kubeflow/labelstudio的deployment中的环境变量xx.xx.xx.xx为自己浏览器真实访问ip和端口
0、如果使用已有k8s,并且使用的ipvs模式,需要将istio-system命名空间下istio-ingressgateway的service类型改为nodeport
0、kubectl工具不存在,无法下载,在内网中会存在,可以查看修改下start.sh脚本,手动下载kubectl。
1、查看机器lable是否添加
kubectl label node $node train=true cpu=true notebook=true service=true org=public istio=true knative=true kubeflow=true kubeflow-dashboard=true mysql=true redis=true monitoring=true logging=true --overwrite
2、如果istio部署有问题,对于k8s 1.21+以上的版本。使用如下命令修复
kubectl delete -f istio/install.yaml
kubectl apply -f istio/install-1.15.0.yaml
kubectl patch svc istio-ingressgateway -n istio-system -p '{"spec":{"externalIPs":["'"xx.xx.xx.xx"'"]}}'
2、pv和pvc是否绑定。有些k8s平台会自动为pvc添加Storage Classes,需要对应pv也添加完成绑定
3、kube-system命名空间coredns是否正常,
- 3.1、可以放开防火墙
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
放开防火墙后重启coredns 的pod
- 3.2、可以查看53端口是否被占用,比如bind服务,关闭主机原有53端口服务(注意机器重启后可能原53端口占用的服务被重新打开)。
4、infra命名空间mysql是否部署成功。 对于出现 Table 'kubeflow.ab_permission_view_role。删除/data/k8s/infra/mysql/,然后重新部署sh start.sh xx.xx.xx.xx
5、infra命名空间其他组件是否成功,会链接mysql完成数据库初始化。kubeflow数据库由kubeflow-dashboard.infra组件完成初始化,metadb数据库由metadata-write.kubeflow组件初始化,mlpipeline数据库由ml-pipeline组件完成初始化。
- 5.1 数据库如果库表不全,可以把对应库删掉,重启相应组件。
- 5.2 如果kubeflow-dashboard报core dump,则可能是linux系统内核版本太低,需要升级系统内核
6、istio-system空间,istio-ingressgateway的svc是否externalIPs形式暴露了内网ip。 如果有双网卡, 在执行sh start.sh xx.xx.xx.xx时,使用的是内网ip,浏览器打开的是外网ip
6、istio-ingressgateway暴露80以后,仍然无法打开,可能原因(1)80被内网封禁(2)80倍其他服务占用(3)没有禁用nginx-ingress (4)防火墙限制,可以/sbin/iptables -P FORWARD ACCEPT
7、istio-ingressgateway暴露其他端口,如果80端口被占用了,可以修改 istio-system/svc/istio-ingressgateway 类型为NodePort
8、镜像拉取不下来:可以离线拉取一遍平台镜像,对于其他的仓库镜像,最好public,否则更新每个命名空间hubsecret的账号密码。配置在线开发->镜像仓库 中hubsecret中的账号密码为自己的dockerhub官网的账号密码
9、k8s dashboard不能搜索,在高版本k8s中,使用
kubectl apply -f dashboard/v2.6.1-cluster.yaml
部署更高版本的k8s dashboard