安装 JupyterHub#

有了可用的 Kubernetes 集群 和已安装的 Helm,我们可以在 Kubernetes 集群中使用 JupyterHub Helm 图表安装 JupyterHub。

初始化 Helm 图表配置文件#

Helm 图表包含 模板,这些模板可以渲染到要安装的 Kubernetes 资源。Helm 图表的使用者可以覆盖图表默认值,以影响模板的渲染方式。

在此步骤中,我们将为您初始化一个图表配置文件,以便您调整 JupyterHub 的安装。我们将将其命名为 config.yaml,并在以后引用它。

YAML 简介

如果您以前没有使用过 YAML,那么花几分钟时间 学习它 可能会值得您的时间。

从 1.0.0 版本开始,您无需任何配置即可开始使用,因此您可以创建一个 config.yaml 文件,其中包含一些有用的注释。

# This file can update the JupyterHub Helm chart's default configuration values.
#
# For reference see the configuration reference and default values, but make
# sure to refer to the Helm chart version of interest to you!
#
# Introduction to YAML:     https://www.youtube.com/watch?v=cdLNKUoMc6c
# Chart config reference:   https://zero-to-jupyterhub.readthedocs.io/en/stable/resources/reference.html
# Chart default values:     https://github.com/jupyterhub/zero-to-jupyterhub-k8s/blob/HEAD/jupyterhub/values.yaml
# Available chart versions: https://hub.jupyter.org/helm-chart/
#

如果您正在使用终端并且不确定如何创建此文件,可以尝试使用 nano config.yaml

安装 JupyterHub#

  1. 让 Helm 了解 JupyterHub Helm 图表存储库,这样您就可以从该存储库中安装 JupyterHub 图表,而无需使用长 URL 名称。

    helm repo add jupyterhub https://hub.jupyter.org/helm-chart/
    helm repo update
    

    这应该显示类似以下的输出

    Hang tight while we grab the latest from your chart repositories...
    ...Skip local chart repository
    ...Successfully got an update from the "stable" chart repository
    ...Successfully got an update from the "jupyterhub" chart repository
    Update Complete. ⎈ Happy Helming!⎈
    
  2. 现在,通过从包含 config.yaml 的目录运行以下命令,安装由 config.yaml 配置的图表

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

    其中

    • <helm-release-name> 指的是 Helm 版本名称,一个用于区分图表安装的标识符。当您更改或删除此图表安装的配置时,您需要它。如果您的 Kubernetes 集群将包含多个 JupyterHub,请确保将它们区分开来。您可以使用 helm list 列出您的 Helm 版本。

    • <k8s-namespace> 指的是 Kubernetes 命名空间,一个用于对 Kubernetes 资源进行分组的标识符,在本例中,所有与 JupyterHub 图表相关的 Kubernetes 资源。您将需要命名空间标识符才能使用 kubectl 执行任何命令。

    • 此步骤可能需要一段时间,在此期间,您的终端将不会有任何输出。JupyterHub 正在后台安装。

    • 如果您收到 release named <helm-release-name> already exists 错误,则应通过运行 helm delete <helm-release-name> 删除该版本。然后重复此步骤重新安装。如果仍然存在,请执行 kubectl delete namespace <k8s-namespace> 并重试。

    • 一般来说,如果安装步骤出现问题,请在重新运行安装命令之前,通过运行 helm delete <helm-release-name> 删除 Helm 版本。

    • 如果您从大型 Docker 镜像中拉取,您可能会遇到 Error: timed out waiting for the condition 错误,请在 helm 命令中添加 --timeout=<number-of-minutes>m 参数。

    • 参数 --version 对应于 *Helm 图表版本*,而不是 JupyterHub 版本。每个版本的 JupyterHub Helm 图表都与特定版本的 JupyterHub 配对。例如,Helm 图表的 0.11.1 版本运行 JupyterHub 1.3.0。有关每个版本的 JupyterHub Helm 图表中安装的 JupyterHub 版本列表,请参阅 Helm 图表存储库

  3. 在步骤 2 运行时,您可以在另一个终端中看到正在创建的 Pod。

    kubectl get pod --namespace <k8s-namespace>
    

    为了保持理智,我们建议您为 kubectl 启用自动补全(请按照 适用于您的平台的 kubectl 安装说明 查找 shell 自动补全说明)。

    并为 --namespace 标志设置默认值。

    kubectl config set-context $(kubectl config current-context) --namespace <k8s-namespace>
    
  4. 等待 *hub* 和 *proxy* Pod 进入 Running 状态。

    NAME                    READY     STATUS    RESTARTS   AGE
    hub-5d4ffd57cf-k68z8    1/1       Running   0          37s
    proxy-7cb9bc4cc-9bdlp   1/1       Running   0          37s
    
  5. 找到我们可以用来访问 JupyterHub 的 IP。运行以下命令,直到 proxy-public 服务EXTERNAL-IP 可用,如示例输出所示。

    kubectl --namespace <k8s-namespace> get service proxy-public
    
    NAME           TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
    proxy-public   LoadBalancer   10.51.248.230   104.196.41.97   80:31916/TCP   1m
    

    或者,使用简短形式。

    kubectl --namespace <k8s-namespace> get service proxy-public --output jsonpath='{.status.loadBalancer.ingress[].ip}'
    
  6. 要使用 JupyterHub,请在浏览器中输入 proxy-public 服务的外部 IP。JupyterHub 正在使用默认的 *dummy* 身份验证器运行,因此输入任何用户名和密码组合都将允许您进入 hub。

恭喜!现在您已经运行了基本的 JupyterHub,您可以 扩展它优化它 以满足您的需求。

一些定制示例:

  • 配置登录以使用对您有意义的帐户(Google、GitHub 等)。

  • 为用户容器使用合适的预构建镜像或构建您自己的镜像。

  • 将其托管在 https://your-domain.com 上。