Skip to content
栾鹏 edited this page Dec 5, 2023 · 68 revisions

基础环境依赖

  • 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

平台完成部署之后如下:

167874734-5b1629e0-c3bb-41b0-871d-ffa43d914066

部署提前预备内容

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

1、对于不熟悉k8s的同学

可以参考视频,先使用rancher部署k8s,再部署cube-studio

单机部署视频

2、对于已有k8s的同学

平台部署命令:

将k8s集群的kubeconfig文件复制到install/kubernetes/config文件中,对于双网卡的同学,记得rancher里面current-context切换为内网的连接形式,然后执行如下命令,其中xx.xx.xx.xx为机器内网的ip(不是外网ip)

# 在k8s worker机器上执行
sh start.sh xx.xx.xx.xx

3、对于隔离内网部署的同学

需要先把需要的镜像拉取到内网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

开源体验地址:

http://39.96.177.55:8888/

学习、部署、体验、咨询

Clone this wiki locally