백업을 만들고 노트북 데이터 복원하기

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 네임스페이스에서 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 네임스페이스의 모든 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 인스턴스의 포드 이름을 가져옵니다.

    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 인스턴스의 포드 이름입니다.
    • 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 리소스의 새 포드를 만듭니다.

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

    KUBECONFIG_PATH를 클러스터의 kubeconfig 파일 경로로 바꿉니다.

  8. vtxwb-data 포드가 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 인스턴스의 포드 이름입니다.

    데이터를 복사하면 복원된 데이터를 /home/jovyan/restore 디렉터리에서 사용할 수 있습니다.

  10. 복원된 데이터에 액세스하기 위해 만든 포드를 삭제합니다.

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

    KUBECONFIG_PATH를 클러스터의 kubeconfig 파일 경로로 바꿉니다.