Skip to content
栾鹏 edited this page Nov 12, 2023 · 7 revisions

在线开发是一个很重要的功能,对于大部分用户来说,在线的IDE比命令vim是要方便很多。cube主要提供了vscode和jupyter两种在线ide。并没有将代码和数据进行分割存储。所以在notebok中打开的就是完全用户自己的代码和数据,可以方便的进行调试。

vscode

theia是一个在线vscode,更像本地IDE,主要服务纯代码开发(多实例,一个人可以同时开多个theia)

在这里插入图片描述

工作目录默认是/mnt,归档目录是/archives,可以把一些想永久保存,不易被误删的文件放在归档目录。

在这里插入图片描述 在vscode里面(本质为theia),用户跟本地vscode基本一致,上传下载文件/文件夹,也可以在theia中打开命令行终端。并且在其中封装了用户的基本环境需求,比如python。

需要说明的是,由于theia的功能中有些进程,例如rg进程,会不停的搜索扫描目录下的所有文件。由于个人目录下包含了用户的代码和用户的数据,文件可能非常多(千万到亿级别的文件数量)。这些进程扫描会严重拖慢分布式存储的性能。所以cube做了定时检杀的功能,能够及时检杀rg和git进程,提高在线vscode的响应速度。

jupyter

在这里插入图片描述

数据挖掘的用户使用jupyter会更多一些。在jupyter里面跟vscode里面相同,也安装了一些实用的插件,比如tensorboard,使用jupyter pro版本可以在jupyter里面打开。

比如我们在pipeline/example/tensorboard中有一个示例文件demo.py,运行这个文件,会生成一个fit_logs文件夹,这就是tf的log目录,进入这个目录,然后使用tensorboard按钮启动tensorboard,就可以查看该训练的情况。

大数据版本

xxxxxxxxxx

机器学习版本

xxxxxxxxx

深度学习版本

xxxxxxxxx

rstudio

xxxxxxxxx

matlab

xxxxxxxxxx

ssh远程连接jupyter功能

实现原理

jupyter版本的notebook中提供了sshd,会在notebook创建时自动启动ssh-server,并且会自动生成配置文件example/ssh链接

并为每个notebook的pod配置一个单独的service,service使用ip和端口的形式对外暴漏,每个notebook使用的端口为10000+10*id+1

需要公司网络能通过ip+端口的形式访问notebook的服务

操作方法

按照example/ssh链接 文件中的描述,在本地~/.ssh/config中添加链接配置文件

# 将此文件内容追加到~/.ssh/config   ssh root登录密码 cube-studio
# ssh-copy-id -p PORT root@HOST  本地设置免密登录

Host cube-studio
  HostName xx.xx.xx.xx
  Port xx
  User root
  IdentityFile ~/.ssh/id_rsa
  ServerAliveInterval 10
  ControlMaster auto
  ControlPath ~/.ssh/master-%r@%h:%p
  ForwardAgent yes

然后就可以ssh链接远程notebook了,并且可以在本地将文件拖拽到本地vscode,这样文件就是自动同步到在线notebook中

jupyter里面链接spark

对于需要连接数据中台的场景,例如连接Hive或Spark集群,我们可以在自定义Notebook中预先配置好相关的XML文件,以便用户直接使用。这样,开发者只需要配置一次,普通用户就可以直接使用,无需再次配置。

tensorboard

xxxxxxxxxxx

git功能

xxxxxxxxxx

gpu监控,cpu,内存监控

xxxxxxxxxx

多内核态

在使用自定义Notebook时,需要注意的是,安装包时应该先激活对应的环境,然后再进行安装。这是因为Jupyter的内核和conda环境是两个不同的概念,需要分别进行管理。

notebook的资源占用问题

cube采用的方案是只设置notebook的pod的limit,而不设置request,这种方案就对不资源进行独占,这样也就不用清理notebook,只是允许了notebook中的资源干扰。

notebook的环境重置问题

如果notebook因为oom,定时清理,机器故障,主动reset等可能原因而重启,notebook中的环境就会丢失,但分布式存储下的内容都会保留,也就是/mnt/$username文件夹下的内容都会保留。

所以我们如果需要环境保存,有两个方案:

  1. cube添加了notebook启动后自动执行/mnt/$username/init.sh脚本,用户只需要在init.sh中定义notebook特定的环境,就可以在启动notebook后拥有自己独特的环境了。
  2. 在notebook中有一个镜像保存按钮,每次notebook环境更改之后,都可以点击这个按钮,保存环境,下次重启就会自动用这个镜像来启动notebook,如下图所示。

notebook镜像保存

多实例的virtualservice代理

多实例在线IDE图示

每个用户可以配置多个在线IDE,可以自己配置资源,镜像,类型。每个在线IDE都是通过istio virtualservice来代理的。所以只要在线IDE的镜像启动的web服务支持url prefix,就可以被加进来作为在线IDE,比如matlab,rstudio。每个在线IDE实例,都有独立的以名称为prefix的url地址,在virtualservice配置绑定istio ingressgateway,这样来实现多实例。

名为admin-9d3d的在线IDE的url prefix:

名为admin-e00f的在线IDE的url prefix:

notebook镜像保存

如果想保存自己notebook中的环境,可以在notebook列表中点击"镜像保存"的按钮,平台将自动将该notebook的pod通过docker commit成镜像,镜像名称为jupyter-user:$notebook-name,并推送到仓库,所以还需要管理员提前配置自己内网的仓库地址和账号密码

开源体验地址:

http://39.96.177.55:8888/

学习、部署、体验、咨询

Clone this wiki locally