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

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 my-namespace` --kubeconfig KUBECONFIG_PATH
    

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