Tinyworker的技术小站

学而不思则罔,思而不学则殆,温故而知新。
知不弃行,行不离思,慎思之,笃行之。

Follow me on GitHub

配置用户环境

部署Jhub意味着你要为多用户提供Jupyter notebook环境。那么就需要某些方法来配置用户环境。

jupyterhub-singleuser是扩展的标准jupyter notebook,大部分的配置和文档都适用于singleuser环境。用户环境的配置通常不通过Jupyterhub,而是通过Jupyter的系统范围配置发生。

安装包

为了让外部包对用户可用,通常要在系统范围或共享环境中安装包。

包的安装路径应该与singleuser的安装路径处于同一环境,且用户必须有读/执行权限。若要用户可以安装额外的包,需要有写的权限。

配置Jupyter和IPython

二者皆有自己的配置系统。

作为JHub的管理用,你通常希望为所有用户安装和配置环境。Jupyter和IPython支持系统范围的配置(逻辑路径下的全局配置)。

典型的配置文件路径有:

  • 系统范围的/etc/{jupyter ipython}
  • 环境范围的有{sys.prefix}/etc/{jupyter ipython}

例如,系统范围内激活扩展应用,在/etc/ipython/ipython_config.py

c.InteractiveShellApp.extensions.append("cython")

例如,为所有用户激活Jupyter notebook的配置,在/etc/jupyter/jupyter_notebook_config.py

# shutdown the server after no activity for an hour
c.NotebookApp.shutdown_no_activity_timeout = 60 * 60
# shutdown kernels after no activity for 20 minutes
c.MappingKernelManager.cull_idle_timeout = 20 * 60
# check for idle kernels every two minutes
c.MappingKernelManager.cull_interval = 2 * 60

安装kernelspecs

你可能有多个Jupyter kernel,而且能让所有用户使用。那么就意味着kernelspecs安装在系统范围或JHub的sys.prefix。

默认kernelspecs是安装在系统范围的,但某些kernel可能默认装在home路径下。这时需要移动到系统范围目录下。

例如,安装系统范围的核心

/path/to/python3 -m IPython kernel install --prefix=/usr/local
/path/to/python2 -m IPython kernel install --prefix=/usr/local

多用户主机与容器

有两种类型的环境取决于你选择的生成器:

  • 多用户主机(共享系统)

  • 容器

第一类是共享系统,用户有JHub的账户和home路径,这时共享配置和安装必须在系统范围路径下,比如/etc/或/usr/local或自定义路径如/opt/conda。

第二类是容器,系统范围的环境实际上是容器镜像。

无论哪种场景,你都要避免将配置放入用户的home路径下,因为用户可以修改这些配置。同时,home路径一旦创建就一直存在,管理员很难进行更新。

命名服务

默认情况下,每个用户有一个服务。

但JHub可以允许每个用户有多个服务,这能允许用户配置决定哪个服务将要启动,因此用户可以有多个配置同时允许,而不需要停止并重启其中一个。

可以配置用户允许的最大服务数量:

c.JupyterHub.named_server_limit_per_user = 5