创建备份并恢复笔记本数据

借助 Google Distributed Cloud (GDC) 网闸隔离配置,您可以创建备份并从 Vertex AI Workbench JupyterLab 实例的主目录恢复数据。由于 Vertex AI Workbench 不会备份 Notebook 自定义资源上的设置,因此您必须创建新的 JupyterLab 实例并将恢复的数据传输到该实例。

如果您刚开始接触 Vertex AI,请详细了解 Vertex AI Workbench。

准备工作

如需获得复制恢复的数据所需的权限,请让您的 IAM 组织管理员为您授予 User Cluster Developer (user-cluster-developer) 角色。

创建备份并恢复 JupyterLab 实例数据

定义受保护的应用,以便一次性创建单个 JupyterLab 实例的主目录或项目中所有 JupyterLab 实例的主目录的备份。

在要安排备份的集群中创建 ProtectedApplication 自定义资源。备份和恢复方案使用受保护的应用来选择资源。如需了解如何创建受保护的应用,请参阅受保护的应用策略。

ProtectedApplication 自定义资源包含以下字段:

字段 说明
resourceSelection ProtectedApplication 对象选择要备份或恢复的资源的方式。
type 选择资源的方法。Selector 类型表示必须选择具有匹配标签的资源。
selector 选择规则。此字段包含以下子字段:
matchLabels ProtectedApplication 对象用于匹配资源的标签。此字段包含以下子字段:
app.kubernetes.io/part-of 此应用所属的更高级别应用的名称。选择 Vertex AI Workbench 作为 JupyterLab 实例的高级应用。
app.kubernetes.io/component 架构中的组件。选择 Vertex AI Workbench 中为 JupyterLab 实例提供存储空间的资源。
app.kubernetes.io/instance 用于标识应用实例的唯一名称。缩小范围以选择 JupyterLab 实例。该值与 GDC 控制台上的 JupyterLab 实例名称相同。

使用 ProtectedApplication 自定义资源选择单个 JupyterLab 实例或项目中的所有 JupyterLab 实例的存储空间,如以下示例所示:

  • 选择单个 JupyterLab 实例的存储空间:

    以下示例展示了一个 ProtectedApplication 自定义资源,该资源为 my-project 命名空间中名为 my-instance-name 的 JupyterLab 实例选择存储空间:

    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 实例的存储空间:

    以下示例展示了一个 ProtectedApplication 自定义资源,该资源为 my-project 命名空间中的所有 JupyterLab 实例选择存储空间:

    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 标签,因为它会选择所有 JupyterLab 实例。

如需创建备份并从 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:项目的命名空间。
    • KUBECONFIG_PATH:集群中 kubeconfig 文件的路径。