Skip to content

容器鏡像

Kubeflow Notebooks 原生支持三種類型的筆記本,JupyterLabRStudioVisual Studio Code(代碼服務器),但任何基於 Web 的 IDE 都應該可以使用。 Notebook 服務器作為 Kubernetes Pod 內的容器運行,這意味著 IDE 的類型(以及安裝的包)由您為服務器選擇的 Docker 鏡像決定。

鏡像

Kubeflow 提供了許多範例容器鏡像來幫助使用者入門。

詳細的配置與修改手法可參考:

Base Images

這些容器鏡像為 Kubeflow Notebook 容器提供了一個共同的起點。查看本文的 自定義容器鏡像 章節以了解如何使用您自己的套件來擴展它們。

Dockerfile Registry Notes
base kubeflownotebookswg/base:{TAG} common base image
codeserver kubeflownotebookswg/codeserver:{TAG} base code-server (Visual Studio Code) image
jupyter kubeflownotebookswg/jupyter:{TAG} base JupyterLab image
rstudio kubeflownotebookswg/rstudio:{TAG} base RStudio image

Full Images

下列容器鏡像使用數據科學家和 ML 工程師使用的常用套件來擴展了上述的 base images。

Dockerfile Registry Notes
codeserver-python kubeflownotebookswg/codeserver-python:{TAG} code-server (Visual Studio Code) + Conda Python
jupyter-pytorch (CPU) 此版只有源碼但沒有 push 到 dockerhub JupyterLab + PyTorch (CPU)
jupyter-pytorch (CUDA) 此版只有源碼但沒有 push 到 dockerhub JupyterLab + PyTorch (CUDA)
jupyter-pytorch-full (CPU) kubeflownotebookswg/jupyter-pytorch-full:{TAG} JupyterLab + PyTorch (CPU) + common packages
jupyter-pytorch-full (CUDA) kubeflownotebookswg/jupyter-pytorch-cuda-full:{TAG} JupyterLab + PyTorch (CUDA) + common packages
jupyter-scipy kubeflownotebookswg/jupyter-scipy:{TAG} JupyterLab + SciPy packages
jupyter-tensorflow (CPU) 此版只有源碼但沒有 push 到 dockerhub JupyterLab + TensorFlow (CPU)
jupyter-tensorflow (CUDA) 此版只有源碼但沒有 push 到 dockerhub JupyterLab + TensorFlow (CUDA)
jupyter-tensorflow-full (CPU) kubeflownotebookswg/jupyter-tensorflow-full:{TAG} JupyterLab + TensorFlow (CPU) + common packages
jupyter-tensorflow-full (CUDA) kubeflownotebookswg/jupyter-tensorflow-cuda-full:{TAG} JupyterLab + TensorFlow (CUDA) + common packages
rstudio-tidyverse kubeflownotebookswg/rstudio-tidyverse:{TAG} RStudio + Tidyverse packages

Tip

當根據 Kubeflow 自定義容器鏡像的要求構建了客制容器鏡像後想要把這個容器鏡像加入到 Notebook 配置的下拉選單中, 需要去修改下列的配置檔案:

apps/jupyter/jupyter-web-app/upstream/base/configs/spawner_ui_config.yaml
spawnerFormDefaults:
image:
    # The container Image for the user's Jupyter Notebook
    value: kubeflownotebookswg/jupyter-scipy:v1.7.0
    # The list of available standard container Images
    options:
    - kubeflownotebookswg/jupyter-scipy:v1.7.0
    - kubeflownotebookswg/jupyter-pytorch-full:v1.7.0
    - kubeflownotebookswg/jupyter-pytorch-cuda-full:v1.7.0
    - kubeflownotebookswg/jupyter-tensorflow-full:v1.7.0
    - kubeflownotebookswg/jupyter-tensorflow-cuda-full:v1.7.0
...
...

容器鏡像依存關係圖

下列的流程圖顯示了我們的筆記本容器鏡像的相互依賴關係。

自定義容器鏡像

用戶在生成 Kubeflow Notebook 後所安裝的套件只會持續在 pod 的生命週期(除非安裝到 PVC 支持的目錄中)。

為確保套件在整個 Pod 重啟過程中得到保留,用戶有兩種選擇:

  1. 構建包含所需套件的自定義容器鏡像(Custom Image)
  2. 確保套件安裝在 PVC 支持的目錄中

Info

  1. 通過擴展 `base image`` 之一來製作自定義容器鏡像
  2. 容器鏡像以 `jovyan`` 用戶身份運行
  3. 容器鏡像使用 s6-overlay init 系統來管理進程
  4. 參考下列文章來了解 s6-overlay

容器鏡像要求

要讓 Kubeflow Notebooks 使用的容器鏡像,容器鏡像必須符合下列的要求:

  • 在端口 8888 上公開一個 HTTP 接口:

    • kubeflow 在運行時使用我們期望容器監聽的 URL 路徑設置環境變量 NB_PREFIX
    • kubeflow 使用 IFrame,因此請確保您的應用程序在 HTTP 響應標頭中設置了 Access-Control-Allow-Origin: *
  • 以名為 jovyan 的用戶身份運行:

    • jovyan 的主目錄應該是 /home/jovyan
    • jovyan 的 UID 應該是 1000
  • 使用掛載在 /home/jovyan 的空 PVC 成功啟動:

    • kubeflow 會在 /home/jovyan 掛載一個 PVC 以在 Pod 重啟時保持狀態