我爱平铺

jupyterhub在阿里云的kubernetes中配置永久存储

没有使用helm,使用纯jupyterhub,所有参数在jupyterhub_config.py中配置

默认情况下,每一个用户的server关闭再打开后,所有的数据就都消失了,因为是存储在docker容器中而已。配置一个存储卷即可实现每个用户的数据持久化存储。

经过研究,配置阿里云的NAS(flexVolume)是最简便且易用的方法。

准备NAS

前往阿里云的NAS控制台创建一个,并增加挂载点,可以得到一个类似3e06949xxx-xxxxx.cn-shanghai.nas.aliyuncs.com的挂载地址

配置jupyterhub_config.py

下面的例子,在每一个jupyter notebook的userdata目录下挂载一个存储卷。这里通过flexVolume实现,这个会比persistentVolumeClaim容易配置很多,pvc的方式最终无法找到正确的路径。

关于参数:

  1. storage_capacity 每个用户的容量限制。不过阿里云收费的时候是根据实际用量的,所以这里相当于一个限制而已,并不是设置了5G就收费5G
  2. volumes 一个数组,定义挂载盘,其中的name设置为根据每个用户变化(这里可以随便改,和volume_mounts的一致就可以了),flexVolume下的name同理,driver固定为alicloud/nas,里面的options:
    1. server 填写上一步中得到的挂载地址
    2. vers flexVolume的版本,实测3版本的会在某一步失败,直接使用4.0
    3. path NAS中的子目录,阿里云建议以/share开头,然后给每个用户建立一个独特的用户名
    4. mode 按理说应该755,但实际发现只有777才能在notebook中拥有正确的写入权限
  3. volume_mounts 和volumes一一对应,指定挂载到本地的何处
c.KubeSpawner.storage_access_modes = ['ReadWriteMany']
c.KubeSpawner.storage_capacity = '5Gi'
c.KubeSpawner.volumes = [{
    'name': 'volume-{username}',
    'flexVolume': {
        'name': 'volume-{username}',
        'driver': 'alicloud/nas',
        'options': {
            'server': '3e06949xxx-xxxxx.cn-shanghai.nas.aliyuncs.com',
            'vers': '4.0',
            'path': '/share/jupyter-user-{username}',
            'mode': '777'
        }
    }
}]
c.KubeSpawner.volume_mounts = [{
    'name': 'volume-{username}',
    'mountPath': '/home/jovyan/userdata'
}]

参考:

  1. kubespanwer文档
  2. 阿里云kuberspanwer通过flexVolume使用NAS文档

文章原始链接:https://sijie.wang/posts/jupyterhub-flexvolume/

本站文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请保留原始链接