在 Kubernetes 上升级 JupyterHub#

本节介绍通过更新 Helm Chart 升级 JupyterHub 部署的最佳实践。

Z2JH 遵循 语义化版本控制,每个版本采用 MAJOR.MINOR.PATCH 的形式。次要版本和补丁版本应该向后兼容,并且不需要更改您的部署。查看 变更日志 以了解影响您部署的新功能或错误修复,然后按照 helm 升级命令 操作。

主要版本可能包含重大更改,并且通常需要更改您的配置。除了本页上的通用说明外,它们还具有专门用于升级部署的说明。

如需更多帮助,请随时通过 gitterDiscourse 论坛 与我们联系。

主要 helm-chart 升级#

主要版本指南

在执行主要升级之前,这些步骤至关重要。

  1. 始终备份您的数据库!

  2. 查看相应的升级指南,或 变更日志 以了解不兼容的更改和升级说明。

  3. 相应地更新您的配置。

  4. 用户服务器可能需要在升级之前停止,或在升级之后重新启动。

  5. 如果您计划升级关键的主要安装,建议您先在暂存集群上测试升级,然后再将其应用于生产环境。

helm upgrade 命令#

根据变更日志修改您的 config.yaml 文件后,您将需要 <helm-release-name> 来运行升级命令。要查找 <helm-release-name>,请运行

helm list --namespace <k8s-namespace>

在生产系统上进行升级之前,请务必在暂存环境中测试升级!

要运行升级

helm upgrade --cleanup-on-fail <helm-release-name> jupyterhub/jupyterhub --version=<chart-version> --values config.yaml --namespace <k8s-namespace>

例如,要将版本升级到 1.1.1,helm 发布名称为 jhub,k8s 命名空间为 jhub

helm upgrade --cleanup-on-fail jhub jupyterhub/jupyterhub --version=1.1.1 --values config.yaml --namespace jhub

数据库#

Z2JH 的主要版本可能包含 JupyterHub 的主要版本,这需要升级数据库模式。如果您使用的是默认数据库提供程序(SQLite),则在执行 helm upgrade 时,将自动执行所需的数据库升级。旧数据库的备份会自动创建在 hub 卷上。

无法自动备份其他数据库提供程序,因此不会自动执行升级。

默认(SQLite):当您执行升级时,数据库升级将自动执行。

MySQL / PostgreSQL:您将执行以下步骤,其中包括手动更新您的数据库

  1. 备份您的数据库,以防万一出现问题。

  2. 确保 JupyterHub 用于连接到数据库的数据库用户可以执行模式迁移,例如添加新表、更改表等。

  3. 在您的 config.yaml 中,添加以下配置

    hub:
      db:
        upgrade: true
    
  4. 执行 helm upgrade。这应该执行所需的数据库升级。

  5. 删除步骤 3 中添加的行,并执行另一个 helm upgrade,以便将来 JupyterHub 升级不会无意中升级模式。

自定义 Docker 镜像:JupyterHub 版本匹配#

如果您使用的是自定义构建的镜像,请确保其中安装的 JupyterHub 包的版本与 JupyterHub 的主要版本匹配,当前为 2.*。

例如,如果您使用 pip 在自定义 Docker 镜像中安装 JupyterHub,您将使用

RUN pip install --no-cache-dir jupyterhub==2.3.1

如果您使用 conda 或 mamba

RUN conda install --channel=conda-forge -y jupyterhub-base=2.3.1

更新配置以使用此新镜像,这通常通过 singleuser.image 或作为 singleuser.profileList 的一部分完成。

每个 Helm Chart 中安装的 JupyterHub 版本#

每个 Helm Chart 都打包了特定版本的 JupyterHub(以及其他软件)。有关相关软件包版本的详细信息,请参阅 Helm Chart 存储库

故障排除#

如果升级在测试系统或不为用户提供服务的系统上失败,您可以尝试使用以下命令删除 helm chart

helm delete <helm-release-name> --namespace <k8s-namespace>

helm list --namespace <k8s-namespace> 可用于查找 <helm-release-name>