借助 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 实例:
- 满足前提条件。
- 创建与 JupyterLab 实例关联的 JupyterLab 笔记本,以复制恢复的数据。
获取您在其中创建笔记本的 JupyterLab 实例的 Pod 名称:
kubectl get pods -l notebook-name=INSTANCE_NAME -n PROJECT_NAMESPACE替换以下内容:
INSTANCE_NAME:您配置的 JupyterLab 实例的名称。PROJECT_NAMESPACE:您在其中创建了 JupyterLab 实例的项目命名空间。
获取 JupyterLab 实例正在运行的映像的名称:
kubectl get pods POD_NAME -n PROJECT_NAMESPACE -o jsonpath="{.spec.containers[0].image}"替换以下内容:
POD_NAME:JupyterLab 实例的 Pod 名称。PROJECT_NAMESPACE:您在其中创建了 JupyterLab 实例的项目命名空间。
找到已恢复的
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 实例的项目命名空间。
创建一个名为
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资源的名称。
为恢复的
PersistentVolumeClaim资源创建新的 Pod:kubectl apply -f ./vtxwb-data --kubeconfig KUBECONFIG_PATH将
KUBECONFIG_PATH替换为集群中 kubeconfig 文件的路径。等待
vtxwb-datapod 达到RUNNING状态。将恢复的数据复制到新的 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目录中找到恢复的数据。删除您为访问恢复的数据而创建的 Pod:
kubectl delete pod vtxwb-data -n PROJECT_NAMESPACE \ --kubeconfig KUBECONFIG_PATH替换以下内容:
PROJECT_NAMESPACE:项目的命名空间。KUBECONFIG_PATH:集群中 kubeconfig 文件的路径。