教程:在 Google Kubernetes Engine 上生成笔记本服务器

本教程介绍如何使用 Google Kubernetes Engine (GKE) 安装一个使用 JupyterHub 作为笔记本服务器编排器的 Jupyter 笔记本平台。本文档适用于为数据科学研究构建 Jupyter 笔记本环境的管理员。本文假定您熟悉 Jupyter 笔记本和 GKE。

本文是系列文章中的第三篇,讨论如何在 Google Cloud 上选择笔记本平台、如何自定义 JupyterHub 开源代码,以及如何在一个 Google Cloud 基础架构选项上运行修改后的版本。

该系列包含以下文档:

如果符合以下条件,则本教程是相关的:

  • Notebooks(Vertex AI 和 AI Platform)无法满足您的需求。
  • 您是公司的管理员。
  • 您可以创建新的 GKE 集群或使用现有 GKE 集群。
  • 您希望整合笔记本服务器的费用。
  • 您需要集中管理最终用户(数据科学家)的配置。

在本教程中,您将部署本系列简介所介绍的简单架构版本:

本教程中创建的解决方案的架构。

在此架构中:

  1. 管理员为 GKE Hub 和笔记本服务器创建 Docker 映像,并将这些映像存储在 Container Registry 中。
  2. 管理员可使用以下项创建或重复使用 GKE 集群来部署 GKE Hub:
    • JupyterHub 的 Docker 映像。JupyterHub 映像包含自定义身份验证器和修改后的 KubeSpawner 版本。
    • 反向代理的 Docker 映像。此代理与 Google 管理的反向代理服务器进行通信以管理身份验证。
  3. 管理员请求反向代理网址,以与数据科学家共享。
  4. 数据科学家使用反向代理网址登录 JupyterHub 界面,然后创建一个或多个沙盒化笔记本环境。用户通过选择包含管理员提供的笔记本服务器的 Docker 映像来执行此操作。

目标

  • 启动 GKE 集群。
  • 在 GKE 上部署 JupyterHub。
  • 允许用户使用 Google Cloud 凭据透明地向 JupyterHub 进行身份验证。
  • 创建笔记本服务器映像。
  • 为同一用户生成多个笔记本。

费用

本教程使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  5. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  6. 在 Cloud Console 中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Cloud Console 的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Cloud SDK 的 Shell 环境,其中包括 gcloud 命令行工具以及已为当前项目设置的值。该会话可能需要几秒钟时间来完成初始化。

设置您的环境

  1. 在 Cloud Shell 中,将 Google 项目 ID 导出到环境变量,需将 YOUR_PROJECT_ID 替换为您的项目 ID:

    export PROJECT_ID=YOUR_PROJECT_ID
    
  2. 在 Cloud Shell 中设置默认的 Google Cloud 项目 ID:

      gcloud config set project ${PROJECT_ID}
    
  3. 启用本教程所需的 API:

    gcloud services enable \
        compute.googleapis.com \
        container.googleapis.com \
        cloudbuild.googleapis.com \
        containerregistry.googleapis.com
    
  4. 克隆 Notebooks Extended 代码库:

    git clone https://github.com/GoogleCloudPlatform/ai-notebooks-extended.git
    
  5. 转到 gke-hub 文件夹:

    cd ai-notebooks-extended/gke-hub-example/deploy/manually
    
  6. 安装 kubectlMinikubeKustomize 工具:

    bash 00-install-tools.sh
    

    您可以通过以下方式使用这些实用程序:

    • kubectl 可帮助您使用通过脚本促进自动化的命令,与 Kubernetes 环境(本地或云端)进行互动。
    • minikube 可让您运行本地 Kubernetes 环境,以在将 Kubernetes 环境部署到云端之前测试和调试。
    • kustomize 可让您自定义 Kubernetes 声明性文件,以促进在不同上下文中部署相同的 Kubernetes 环境。
  7. 可选择性地修改 10-set-variables.sh 文件并更改默认值以自定义部署。

    您可以更改以下任何值:

    • CLUSTER_NAME:GKE 集群的名称。默认值为 kstd
    • IMAGES_JUPYTER:笔记本服务器的 Docker 映像列表。对于您创建的每个笔记本映像,您都需要附加相关映像名称。列表中的每一项充当本地的映像名称或 GKE 的 Container Registry 映像名称。默认值是一个列表,其中包含用于测试的笔记本服务器。
    • IMAGES_THIRD_PARTY:您选择的注册表中现有映像 URI 的列表。默认值为空列表。
    • WID:此标志表示您是否想要使用 Workload Identity 来创建和使用集群。默认值为 false,表示未启用 Workload Identity 的集群。

准备基础架构

  1. 创建 GKE 集群,并更新 kubectl 配置文件,该文件含有 kubectl 命令的相关凭据和端点引用:

    bash 20-create-infrastructure.sh
    
  2. 创建 JupyterHub 可以在 GKE 集群上生成的 Jupyter 笔记本 Docker 映像:

    bash 15-create-jupyter-image.sh \
        gke \
        jupyter-mine-basic \
        gcr.io/${PROJECT_ID}/jupyter-mine-basic
    

    此命令会将现有的 jupyter-mine-basic Docker 配置作为示例部署到 Container Registry。

  3. 对您要使用的每个笔记本服务器映像运行上一步中的脚本,需将 jupyter-mine-basic 替换为您要使用的映像的名称。

如需详细了解笔记本配置和配置文件,请参阅 KubeSpawner 文档中的 profile_list 参数。

部署 GKE Hub

  1. 构建 JupyterHub 和反向代理映像并将其推送到 Container Registry,然后将其部署到 GKE 集群:

    bash 30-deploy-gke-workloads.sh gke true
    

    true 标志会强制脚本构建 Docker 映像并将其推送到 Container Registry。第一次运行该脚本以及您想要覆盖现有映像时,必须执行此操作。

    由于该标志设置为 true 以构建映像,因此该步骤可能需要几分钟。

  2. 获取反向代理的网址:

    bash 40-get-hub-url.sh
    

    该命令会返回类似于以下内容的网址:

    1a2b3cde4fgh5i6j-dot-us-west1.notebooks.googleusercontent.com
    

    该网址允许通过身份验证的用户访问 JupyterHub 接口。

  3. 复制您从上一个命令获取的网址。

  4. 在网络浏览器中,输入您复制的网址。

  5. Jupyter 选项列表中,点击第一个 Jupyter 笔记本服务器选项。

    Jupyter 笔记本服务器选项列表。

  6. 点击开始

  7. 等待浏览器重定向到 Jupyter。重定向完成后,您将看到如下所示的列表:

    浏览器会显示 JupyterHub。

为您的用户提供 GKE Hub 访问权限

  1. 确保笔记本部署的所有用户都具有代理工作负载的服务帐号的 serviceAccountUser 角色。
  2. 将网址分享给您已创建中心实例的一组数据科学家。

    然后,用户可以根据您提供的配置创建个人笔记本服务器。

清除数据

为避免系统因本教程中使用的资源向您的 Google Cloud 帐号收取费用,您可以删除您创建的资源。您可以逐个删除资源,也可以删除 Google Cloud 项目来删除该项目中的资源。

逐个删除资源

  1. 删除 Kubernetes 项:

    bash 93-delete-gke-workloads.sh
    
  2. 删除 Kubernetes 集群:

    source 10-set-variables.sh
    gcloud container clusters delete ${CLUSTER_NAME} \
      --project ${PROJECT_ID} \
      --zone ${ZONE}
    

删除项目

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤

  • 探索有关 Google Cloud 的参考架构、图表、教程和最佳做法。查看我们的云架构中心