Criar um backup e restaurar dados de notebooks

O Google Distributed Cloud (GDC) air-gapped permite criar backups e restaurar dados do diretório inicial das instâncias do JupyterLab.

Esta página descreve como criar e restaurar backups de dados de notebooks do Vertex AI Workbench. Se você não conhece o 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 para conceder a você o papel 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 mais 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 aos recursos. Esse campo contém os seguintes subcampos:
app.kubernetes.io/part-of O nome de um aplicativo de nível superior do qual ele faz parte. Selecione o Vertex AI Workbench como o aplicativo de nível superior 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. Restrinja o escopo para selecionar uma instância do JupyterLab. O valor é o mesmo que o 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:

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

    O exemplo a seguir mostra um recurso personalizado ProtectedApplication que seleciona o armazenamento de 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
    
  • Selecionar o armazenamento de todas as instâncias do JupyterLab:

    O exemplo a seguir mostra um recurso personalizado ProtectedApplication que seleciona o armazenamento de 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
    

    Esse 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 definido.

Copiar dados restaurados para uma nova instância do JupyterLab

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

  1. Atenda aos pré-requisitos.
  2. Crie um notebook do JupyterLab associado a uma instância do JupyterLab para copiar 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 configurada.
    • PROJECT_NAMESPACE: o namespace do projeto em que você criou a instância do JupyterLab.
  4. Consiga o nome da imagem que a instância do JupyterLab está executando:

    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 atinja 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, os dados restaurados estarão 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.