バックアップを作成してノートブック データを復元する

Google Distributed Cloud(GDC)エアギャップを使用すると、JupyterLab インスタンスのホーム ディレクトリからバックアップを作成してデータを復元できます。

このページでは、Vertex AI Workbench ノートブック データのバックアップの作成と復元について説明します。Vertex AI を初めて使用する場合は、Vertex AI Workbench の詳細をご覧ください。

始める前に

復元されたデータをコピーするために必要な権限を取得するには、IAM 組織管理者にユーザー クラスタ デベロッパー(user-cluster-developer)ロールを付与するよう依頼してください。

JupyterLab インスタンス データのバックアップを作成して復元する

保護されたアプリケーションを定義して、個々の JupyterLab インスタンスのホーム ディレクトリ、またはプロジェクト内のすべての JupyterLab インスタンスのホーム ディレクトリのバックアップを一度に作成します。

バックアップをスケジュールするクラスタに ProtectedApplication カスタム リソースを作成します。バックアップ プランと復元プランでは、保護されたアプリケーションを使用してリソースを選択します。保護されたアプリケーションの作成については、保護されたアプリケーションの戦略をご覧ください。

ProtectedApplication カスタム リソースには、次のフィールドが含まれています。

フィールド 説明
resourceSelection ProtectedApplication オブジェクトがバックアップまたは復元用のリソースを選択する方法。
type リソースを選択する方法。Selector タイプは、一致するラベルを持つリソースを選択する必要があることを示します。
selector 選択ルール。このフィールドには次のサブフィールドが含まれます。
matchLabels ProtectedApplication オブジェクトがリソースの照合に使用するラベル。このフィールドには次のサブフィールドが含まれます。
app.kubernetes.io/part-of このアプリケーションが属する上位レベルのアプリケーションの名前。JupyterLab インスタンスの上位アプリケーションとして Vertex AI Workbench を選択します。
app.kubernetes.io/component アーキテクチャ内のコンポーネント。JupyterLab インスタンスにストレージを提供する Vertex AI Workbench のリソースを選択します。
app.kubernetes.io/instance アプリケーションのインスタンスを識別する一意の名前。スコープを絞り込んで JupyterLab インスタンスを選択します。この値は、GDC コンソールの JupyterLab インスタンスの名前と同じです。

次の例のように、ProtectedApplication カスタム リソースを使用して、単一の JupyterLab インスタンスまたはプロジェクト内のすべての JupyterLab インスタンスのストレージを選択します。

  • 単一の JupyterLab インスタンスのストレージを選択する。

    次の例は、my-project Namespace の my-instance-name という名前の JupyterLab インスタンスのストレージを選択する ProtectedApplication カスタム リソースを示しています。

    apiVersion: gkebackup.gke.io/v1
    kind: ProtectedApplication
    metadata:
      name: my-protected-application
      namespace: my-project
    spec:
      resourceSelection:
        type: Selector
        selector:
          matchLabels:
            app.kubernetes.io/part-of: vtxwb
            app.kubernetes.io/component: storage
            app.kubernetes.io/instance: my-instance-name
    
  • すべての JupyterLab インスタンスのストレージを選択する:

    次の例は、my-project Namespace 内のすべての JupyterLab インスタンスのストレージを選択する ProtectedApplication カスタム リソースを示しています。

    apiVersion: gkebackup.gke.io/v1
    kind: ProtectedApplication
    metadata:
      name: my-protected-application
      namespace: my-project
    spec:
      resourceSelection:
        type: Selector
        selector:
          matchLabels:
            app.kubernetes.io/part-of: vtxwb
            app.kubernetes.io/component: storage
    

    この例には、すべての JupyterLab インスタンスを選択するため、app.kubernetes.io/instance ラベルは含まれていません。

JupyterLab インスタンスからバックアップを作成してデータを復元するには、定義した ProtectedApplication カスタム リソースを使用して、一連のバックアップを計画し、一連の復元を計画します。

復元されたデータを新しい JupyterLab インスタンスにコピーする

JupyterLab インスタンスの PersistentVolumeClaim リソースから新しい JupyterLab インスタンスに復元されたデータをコピーする手順は次のとおりです。

  1. 前提条件を満たします。
  2. 復元されたデータをコピーする JupyterLab インスタンスに関連付けられた JupyterLab ノートブックを作成します。
  3. ノートブックを作成した JupyterLab インスタンスの Pod 名を取得します。

    kubectl get pods -l notebook-name=INSTANCE_NAME -n PROJECT_NAMESPACE
    

    次のように置き換えます。

    • INSTANCE_NAME: 構成した JupyterLab インスタンスの名前。
    • PROJECT_NAMESPACE: JupyterLab インスタンスを作成したプロジェクトの名前空間。
  4. JupyterLab インスタンスが実行されているイメージの名前を取得します。

    kubectl get pods POD_NAME -n PROJECT_NAMESPACE -o jsonpath="{.spec.containers[0].image}"
    

    次のように置き換えます。

    • POD_NAME: JupyterLab インスタンスの Pod 名。
    • PROJECT_NAMESPACE: JupyterLab インスタンスを作成したプロジェクトの名前空間。
  5. 復元された PersistentVolumeClaim リソースの名前を確認します。

    kubectl get pvc -l app.kubernetes.io/part-of=vtxwb,app.kubernetes.io/component=storage,app.kubernetes.io/instance=RESTORED_INSTANCE_NAME -n PROJECT_NAMESPACE
    

    次のように置き換えます。

    • RESTORED_INSTANCE_NAME: 復元した JupyterLab インスタンスの名前。
    • PROJECT_NAMESPACE: JupyterLab インスタンスを作成したプロジェクトの名前空間。
  6. 次の内容で vtxwb-data.yaml という名前の YAML ファイルを作成します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: vtxwb-data
      namespace: PROJECT_NAMESPACE
      labels:
        aiplatform.gdc.goog/service-type: workbench
    spec:
      containers:
      - args:
        - sleep infinity
        command:
        - bash
        - -c
        image: IMAGE_NAME
        imagePullPolicy: IfNotPresent
        name: vtxwb-data
        resources:
          limits:
            cpu: "1"
            memory: 1Gi
          requests:
            cpu: "1"
            memory: 1Gi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /home/jovyan
          name: restore-data
        workingDir: /home/jovyan
      volumes:
      - name: restore-data
        persistentVolumeClaim:
          claimName: RESTORED_PVC_NAME
    

    次のように置き換えます。

    • PROJECT_NAMESPACE: JupyterLab インスタンスを作成したプロジェクトの名前空間。
    • IMAGE_NAME: JupyterLab インスタンスが実行しているコンテナ イメージの名前。
    • RESTORED_PVC_NAME: 復元された PersistentVolumeClaim リソースの名前。
  7. 復元された PersistentVolumeClaim リソース用に新しい Pod を作成します。

    kubectl apply -f ./vtxwb-data --kubeconfig KUBECONFIG_PATH
    

    KUBECONFIG_PATH は、クラスタ内の kubeconfig ファイルのパスに置き換えます。

  8. vtxwb-data Pod が RUNNING 状態になるまで待ちます。

  9. 復元したデータを新しい JupyterLab インスタンスにコピーします。

    kubectl cp PROJECT_NAMESPACE/vtxwb-data:/home/jovyan ./restore --kubeconfig KUBECONFIG_PATH
    
    kubectl cp ./restore PROJECT_NAMESPACE/POD_NAME:/home/jovyan/restore --kubeconfig KUBECONFIG_PATH
    
    rm ./restore
    

    次のように置き換えます。

    • PROJECT_NAMESPACE: JupyterLab インスタンスを作成したプロジェクトの名前空間。
    • KUBECONFIG_PATH: クラスタ内の kubeconfig ファイルのパス。
    • POD_NAME: JupyterLab インスタンスの Pod 名。

    データをコピーすると、復元されたデータが /home/jovyan/restore ディレクトリで使用できるようになります。

  10. 復元されたデータにアクセスするために作成した Pod を削除します。

    kubectl delete pod vtxwb-data -n PROJECT_NAMESPACE \
        --kubeconfig KUBECONFIG_PATH
    

    次のように置き換えます。

    • PROJECT_NAMESPACE: プロジェクトの Namespace。
    • KUBECONFIG_PATH: クラスタ内の kubeconfig ファイルのパス。