Criar um backup e restaurar dados de notebook

Com o Google Distributed Cloud (GDC) air-gapped, é possível criar backups e restaurar dados do diretório inicial das instâncias do JupyterLab.

Nesta página, descrevemos como criar e restaurar backups de dados de notebooks do Vertex AI Workbench. Se você não conhece a Vertex AI, saiba mais sobre o Vertex AI Workbench.

Antes de começar

Para receber as permissões necessárias para copiar dados restaurados, peça ao administrador do IAM da organização que conceda a você a função de desenvolvedor de cluster de usuário (user-cluster-developer).

Criar um backup e restaurar dados da instância do JupyterLab

Defina aplicativos protegidos para criar um backup do diretório inicial de uma instância individual do JupyterLab ou dos diretórios iniciais de todas as instâncias do JupyterLab em um projeto de uma só vez.

Crie um recurso personalizado ProtectedApplication no cluster em que você quer programar backups. Os planos de backup e restauração usam aplicativos protegidos para selecionar recursos. Para informações sobre como criar aplicativos protegidos, consulte Estratégias de aplicativos protegidos.

O recurso personalizado ProtectedApplication contém os seguintes campos:

Campo Descrição
resourceSelection A maneira como o objeto ProtectedApplication seleciona recursos para backups ou restaurações.
type O método para selecionar recursos. Um tipo Selector indica que os recursos com rótulos correspondentes precisam ser selecionados.
selector As regras de seleção. Esse campo contém os seguintes subcampos:
matchLabels Os rótulos que o objeto ProtectedApplication usa para corresponder a recursos. Esse campo contém os seguintes subcampos:
app.kubernetes.io/part-of O nome de um aplicativo de nível superior de que este faz parte. Selecione o Vertex AI Workbench como o aplicativo de alto nível para instâncias do JupyterLab.
app.kubernetes.io/component O componente na arquitetura. Selecione recursos do Vertex AI Workbench que fornecem armazenamento para instâncias do JupyterLab.
app.kubernetes.io/instance Um nome exclusivo que identifica a instância de um aplicativo. Reduza o escopo para selecionar uma instância do JupyterLab. O valor é igual ao nome da instância do JupyterLab no console do GDC.

Use o recurso personalizado ProtectedApplication para selecionar o armazenamento de uma única instância do JupyterLab ou de todas as instâncias do JupyterLab em um projeto, como nos exemplos a seguir:

  • Selecione o armazenamento de uma única instância do JupyterLab:

    O exemplo a seguir mostra um recurso personalizado ProtectedApplication que seleciona o armazenamento para uma instância do JupyterLab chamada my-instance-name no namespace my-project:

    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
    
  • Selecione o armazenamento de todas as instâncias do JupyterLab:

    O exemplo a seguir mostra um recurso personalizado ProtectedApplication que seleciona o armazenamento para todas as instâncias do JupyterLab no namespace my-project:

    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
    

    Este exemplo não contém o rótulo app.kubernetes.io/instance porque seleciona todas as instâncias do JupyterLab.

Para criar um backup e restaurar dados de uma instância do JupyterLab, planeje um conjunto de backups e planeje um conjunto de restaurações usando o recurso personalizado ProtectedApplication que você definiu.

Copiar os dados restaurados para uma nova instância do JupyterLab

Siga estas etapas para copiar os dados restaurados do recurso PersistentVolumeClaim de uma instância do JupyterLab para uma nova:

  1. Atenda aos pré-requisitos.
  2. Crie um notebook do JupyterLab associado a uma instância do JupyterLab para copiar os dados restaurados.
  3. Consiga o nome do pod da instância do JupyterLab em que você criou o notebook:

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

    Substitua:

    • INSTANCE_NAME: o nome da instância do JupyterLab que você configurou.
    • PROJECT_NAMESPACE: o namespace do projeto em que você criou a instância do JupyterLab.
  4. Confira o nome da imagem em que a instância do JupyterLab está sendo executada:

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

    Substitua:

    • POD_NAME: o nome do pod da instância do JupyterLab.
    • PROJECT_NAMESPACE: o namespace do projeto em que você criou a instância do JupyterLab.
  5. Encontre o nome do recurso PersistentVolumeClaim que foi restaurado:

    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
    

    Substitua:

    • RESTORED_INSTANCE_NAME: o nome da instância do JupyterLab que você restaurou.
    • PROJECT_NAMESPACE: o namespace do projeto em que você criou a instância do JupyterLab.
  6. Crie um arquivo YAML chamado vtxwb-data.yaml com o seguinte conteúdo:

    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
    

    Substitua:

    • PROJECT_NAMESPACE: o namespace do projeto em que você criou a instância do JupyterLab.
    • IMAGE_NAME: o nome da imagem do contêiner que a instância do JupyterLab está executando.
    • RESTORED_PVC_NAME: o nome do recurso PersistentVolumeClaim restaurado.
  7. Crie um novo pod para o recurso PersistentVolumeClaim restaurado:

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

    Substitua KUBECONFIG_PATH pelo caminho do arquivo kubeconfig no cluster.

  8. Aguarde até que o pod vtxwb-data alcance o estado RUNNING.

  9. Copie os dados restaurados para uma nova instância do 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
    

    Substitua:

    • PROJECT_NAMESPACE: o namespace do projeto em que você criou a instância do JupyterLab.
    • KUBECONFIG_PATH: o caminho do arquivo kubeconfig no cluster.
    • POD_NAME: o nome do pod da instância do JupyterLab.

    Depois de copiar os dados, eles vão estar disponíveis no diretório /home/jovyan/restore.

  10. Exclua o pod criado para acessar os dados restaurados:

    kubectl delete pod vtxwb-data -n my-namespace` --kubeconfig KUBECONFIG_PATH
    

    Substitua KUBECONFIG_PATH pelo caminho do arquivo kubeconfig no cluster.