Skip to content
栾鹏 edited this page Mar 25, 2023 · 68 revisions

基础环境依赖

  • docker >= 19.03
  • kubernetes = 1.18. | kubernetes = 1.19 | kubernetes = 1.20 | kubernetes = 1.21 | kubernetes = 1.22
  • kubectl >=1.18
  • cfs/ceph等分布式文件系统 挂载到每台机器的 /data/k8s/ (单机可忽略)
  • 单机 磁盘>=200G 单机磁盘容量要求不大,仅做镜像容器的的存储
  • 控制端机器 cpu>=8 mem>=16G
  • 任务端机器,根据需要自行配置

平台完成部署之后如下:

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

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

部署后排查

了解平台基础组件

了解机器标签管理

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
  • 3.2、可以查看53端口是否被占用,比如bind服务,关闭主机原有53端口服务(注意机器重启后可能原53端口占用的服务被重新打开)。

4、infra命名空间mysql是否部署成功。

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官网的账号密码

使用自有的组件,不重复部署

使用自有istio

开源版本中使用istio1.14,可以在start.sh里面禁掉对istio的部署

kubectl apply -f istio/install-crd.yaml
kubectl wait crd/envoyfilters.networking.istio.io --for condition=established --timeout=60s
kubectl apply -f istio/install.yaml

注意事项,

1、isito作为平台的统一入口,需要暴露ip,并开放80,8080端口,会代理cube 的web界面,notebook,pipeline,nni,内部服务,推理服务,监控服务。

2、配置监控对接到prometheus,并且默认不启动sidecar,通过label启动自动注入,同时流量的复制,分流,域名代理等功能可用

使用自有的prometheus

注释掉平台“部署prometheus”部分,仅留下grafna的部分,在仅部署cube-studio的grafana后可以通过修改命名空间monitoring下name为的grafana-datasources的Secret,这个Secret中有prometheus.yaml这个键,将这个键中datasources/url的值改为自有prometheus的url,再重启grafana的pod即可;例如:我希望对接kubesphere的promethues,那就改成http://prometheus-k8s.kubesphere-monitoring-system.svc:9090

注意事项

1、需要包含prometheus的基础组件, node-exporter,机器资源监控,prometheus-k8s,监控数据存储服务,grafana监控可视化看板,alertmanater,报警服务,prometheus_adapter,监控指标转hpa指标,servicemonitor 服务监控发现

2、支持通过annotations 自动被prometheus服务发现

3、部署prometheus/grafana/dashboard中的看板,并在config.py文件中修改所需grafana看板的地址。

4、修改grafana的配置,支持代理,iframe嵌入等,并部署istio virtual使用路径/grafana代理grafana服务

分布式文件系统

juicefs

可以使用juicefs作为分布式文件系统(不需要挂载到每台机器就可以实现多个Pod直接共享统一目录),

执行cd install/kubernetes/juicefs/ && sh start_juicefs.sh;

执行前请阅读install/kubernetes/juicefs/README.md,

并记得修改install/kubernetes/juicefs/.envJUICEFS_HOST_IP为本节点的ip,保证/data目录有足够的空间

开源体验地址:

http://39.96.177.55:8888/

学习、部署、体验、咨询

Clone this wiki locally