Distributed Cloud 연결 서버에서 가상 머신 관리

이 페이지에서는 Google Distributed Cloud의 VM 런타임을 실행하는 Google Distributed Cloud 연결 서버에서 가상 머신을 관리하는 방법을 설명합니다. 이 페이지의 단계를 완료하기 전에 GDC의 VM 런타임을 숙지해야 합니다. 지원되는 게스트 운영체제 목록은 GDC용 VM 런타임에 검증된 게스트 운영체제를 참고하세요.

가상 머신이 Distributed Cloud 연결 플랫폼의 필수 구성요소로 작동하는 방법을 알아보려면 온프레미스 에지 VM을 관리하기 위해 GKE Enterprise 확장을 참고하세요.

Distributed Cloud 연결된 클러스터는 가상 머신 웹훅을 지원합니다. 이를 통해 Distributed Cloud Connected는 로컬 Kubernetes API 서버에 대한 사용자 요청을 검증할 수 있습니다. 거부된 요청은 거부 사유에 관한 자세한 정보를 생성합니다.

Symcloud Storage 구성

Google Distributed Cloud Connected 서버는 Rakuten Symcloud Storage를 스토리지 솔루션으로 사용합니다. Symcloud Storage는 각 Distributed Cloud connected 노드에서 로컬 스토리지 추상화 레이어 역할을 하며 다른 Distributed Cloud connected 노드에서 실행되는 워크로드에 로컬 스토리지를 제공하는 서드 파티 솔루션입니다.

Symcloud Storage는 Google Cloud Marketplace에서 배포되며 여기에 명시된 약관이 적용됩니다. Google은 Distributed Cloud connected에서 Symcloud Storage 사용에 대한 제한적인 지원을 제공하며 지원을 위해 서드 파티 제공업체에 문의할 수 있습니다. Symcloud Storage용 소프트웨어 업데이트는 Distributed Cloud 연결 소프트웨어 업데이트에 포함됩니다.

가상 머신에 Symcloud 스토리지를 사용 설정하려면 다음과 같이 Google Distributed Cloud connected 클러스터를 구성하세요.

  1. 다음 명령어를 사용하여 robinio 네임스페이스를 만듭니다.

    kubectl create ns robinio
    
  2. Symcloud Storage 라이선스 파일을 가져와 다음 명령어를 사용하여 클러스터에 적용합니다.

    kubectl apply LICENSE_FILE
    
  3. 다음 명령어를 사용하여 Symcloud Storage가 실행 중인지 확인합니다.

    kubectl apply LICENSE_FILE
    

    이 명령어는 다음과 유사한 출력을 반환합니다.

     Name:         robin
     Namespace:
     Labels:       app.kubernetes.io/instance=robin
                   app.kubernetes.io/managed-by=robin.io
                   app.kubernetes.io/name=robin
     Annotations:  <none>
     API Version:  manage.robin.io/v1
     Kind:         RobinCluster
     Metadata:
       
     Spec:
       
     Status:
       
       Phase:             Ready
       
    
  4. 다음 구성을 클러스터에 적용하여 robin-block-immediate 스토리지 클래스를 만듭니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: robin-block-immediate
    parameters:
      faultdomain: host
      replication: "3"
      blocksize:   "512"
    provisioner: robin
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    
  5. 다음 구성을 클러스터에 적용하여 robin-snapshotclass 볼륨 스냅샷 클래스를 만듭니다.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: robin-snapshotclass
      labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
      annotations:
        snapshot.storage.kubernetes.io/is-default-class: "true"
    driver: robin
    deletionPolicy: Delete
    

Distributed Cloud Connected에서 GDC의 VM 런타임 지원 사용 설정

기본적으로 Distributed Cloud Connected에서 GDC 가상 머신 지원의 VM 런타임이 사용 설정됩니다. 수동으로 사용 설정해야 하는 경우 이 섹션의 단계를 완료하세요. 이 섹션의 안내에서는 모든 기능을 갖춘 Distributed Cloud 연결 클러스터가 있다고 가정합니다. 클러스터에서 GDC 가상 머신 지원의 VM 런타임을 사용 중지하려면 이 섹션에 설명된 변경사항을 실행취소하세요.

GDC 가상 머신 하위 시스템에서 VM 런타임을 사용 설정하려면 다음 단계를 완료하세요.

  1. 다음 콘텐츠로 VMRuntime 커스텀 리소스를 수정하고 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      annotations:
        baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
        vm.cluster.gke.io/enable-vm-backup: "true"
    spec:
      enabled: true
      storage:
        defaultStorageClass: robin-block-immediate
    haPolicy:
      defaultRecoveryStrategy: Reschedule
      nodeHeartbeatInterval: 15s
      nodeMonitorGracePeriod: 55s

    이 프로세스를 완료하는 데 일반적으로 몇 분 정도 걸립니다.

  2. 다음 명령어를 사용하여 VMRuntime 커스텀 리소스가 클러스터에 적용되었는지 확인합니다.

    kubectl get vmruntime
    

    이 명령어는 다음 예와 유사한 출력을 반환합니다.

    NAME        AGE   ENABLED   READY   PREFLIGHTCHECK
    vmruntime   5m   true      true    true
    
  3. 다음 콘텐츠로 robin-block-immediate 스토리지 클래스의 storageprofile을 수정하고 클러스터에 적용합니다.

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: StorageProfile
    metadata:
      name: robin-block-immediate
    spec:
      claimPropertySets:
        accessModes:
          ReadWriteMany
      volumeMode: Block

virtctl 관리 도구 설치

분산 클라우드 연결 클러스터에서 가상 머신을 관리하려면 virtctl 클라이언트 도구가 필요합니다. 도구를 설치하려면 다음 단계를 완료하세요.

  1. virtctl 클라이언트 도구를 kubectl 플러그인으로 설치합니다.

    export VERSION=v0.59.0-anthos1.28-gke.8
    gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl/usr/local/bin/virtctl
    cd /usr/local/bin
    sudo ln -s virtctl kubectl-virt
    sudo chmod a+x virtctl
    cd -
  2. virt 플러그인이 설치되었는지 확인합니다.

    kubectl plugin list

    플러그인이 성공적으로 설치되면 명령어의 출력에 kubectl-virt이 플러그인 중 하나로 나열됩니다.

가상 머신 이미지용 Cloud Storage 버킷 만들기

이 섹션의 단계를 완료하여 가상 머신 이미지용 Cloud Storage 버킷을 만듭니다. 이미 설정된 이미지 저장소가 있는 경우 이 섹션을 건너뜁니다.

  1. 버킷 만들기의 단계를 완료하여 버킷을 만듭니다.

  2. 다음 명령어를 사용하여 버킷에 액세스할 서비스 계정과 키를 구성합니다.

    export PROJECT_ID=$(gcloud config get-value project)
    gcloud iam service-accounts create image-access
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:image-access@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/storage.objectViewer" \
    gcloud iam service-accounts keys create ./image-access-gcr.json \
      --iam-account="image-access@${PROJECT_ID}.iam.gserviceaccount.com"
  3. 버킷에 액세스하기 위해 클러스터에서 보안 비밀을 만듭니다. 버킷이 공개인 경우 이 단계를 건너뜁니다. 이 보안 비밀은 가상 머신 디스크와 동일한 네임스페이스에 있어야 합니다. 영향을 받는 각 네임스페이스에서 보안 비밀을 만들어야 합니다.

    kubectl create secret generic gcs-image-sa --from-file=creds-gcp.json=./image-access-gcr.json -n NAMESPACE

    CLUSTER_ID을 대상 네임스페이스의 이름으로 바꿉니다.

  4. 버킷에 이미지를 저장합니다.

가상 머신 이미지에서 가상 머신 디스크 만들기

이 섹션의 단계를 완료하여 가상 머신 이미지에서 가상 머신 디스크를 만듭니다.

Cloud Storage에 저장된 이미지에서 디스크 만들기

클러스터에 다음 구성을 적용하여 Cloud Storage 버킷에 저장된 가상 머신에서 가상 머신 디스크를 만듭니다.

 apiVersion: vm.cluster.gke.io/v1
 kind: VirtualMachineDisk
 metadata:
   name: DISK_NAME
   namespace: NAMESPACE
 spec:
   source:
     gcs:
       url: gs://{PROJECT_ID}-vm-images/IMAGE_FILE
       secretRef: gcs-image-sa
   size: DISK_SIZE
   storageClassName: robin-block-immediate

다음을 바꿉니다.

  • DISK_NAME: 이 가상 머신 디스크의 이름입니다.
  • NAMESPACE: 타겟 네임스페이스입니다.
  • IMAGE_FILE: 가상 머신 이미지 파일의 이름입니다.
  • DISK_SIZE: 원하는 디스크 크기입니다. 이 값은 가상 머신 이미지 파일의 virtual-size 값보다 커야 합니다. qemu-img info DISK_SIZE 명령어를 사용하여 이 값을 찾을 수 있습니다.

storageClassName 값을 지정하지 않으면 VMRuntime 리소스에 지정된 기본값이 사용됩니다.

기존 디스크 이미지에서 디스크 만들기

클러스터의 기존 가상 머신 디스크 또는 이미지 파일에서 다음과 같이 가상 머신 디스크를 만듭니다.

  1. 클러스터에 다음 구성을 적용하여 타겟 디스크를 만듭니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: IMAGE_DISK_NAME
      namespace: NAMESPACE
    spec:
      source:
        virtualMachineDisk:
          name: EXISTING_DISK_NAME
      size: DISK_SIZE
      storageClassName: robin-block-immediate

    다음을 바꿉니다.

    • IMAGE_DISK_NAME: 이 가상 머신 디스크의 이름입니다.
    • NAMESPACE: 타겟 네임스페이스입니다.
    • EXISTING_DISK_NAME: 기존 가상 머신 디스크의 이름입니다.
    • DISK_SIZE: 원하는 디스크 크기입니다. 이 값은 기존 디스크 또는 이미지 파일의 크기보다 크거나 같아야 합니다.

    다음과 같이 qemu-img 도구를 사용하여 기존 디스크 또는 이미지 파일의 크기를 확인할 수 있습니다.

    qemu-img info EXISTING_DISK_NAME

    storageClassName 값을 지정하지 않으면 VMRuntime 리소스에 지정된 기본값이 사용됩니다.

  2. 클러스터에 다음 구성을 적용하여 기존 이미지 파일에서 새 디스크를 만듭니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
      namespace: NAMESPACE
    spec:
      source:
        virtualMachineDisk:
          name: IMAGE_DISK_NAME
      size: DISK_SIZE
      storageClassName: robin-block-immediate

    다음을 바꿉니다.

    • IMAGE_DISK_NAME: 이전 단계에서 만든 가상 머신 디스크의 이름입니다.
    • NAMESPACE: 타겟 네임스페이스입니다.
    • DISK_SIZE: 원하는 디스크 크기입니다. 이전 단계에서 만든 가상 머신 디스크의 크기와 같아야 합니다.
  3. 다음 명령어를 사용하여 타겟 디스크를 원하는 크기로 조정합니다.

    kubectl edit gdisk DISK_NAME -n NAMESPACE

    다음을 바꿉니다.

    • DISK_NAME: 이전 단계에서 만든 가상 머신 디스크의 이름입니다.
    • NAMESPACE: 타겟 네임스페이스입니다.
  4. 디스크 구성에서 spec.size 값을 수정하고 클러스터에 적용합니다.

빈 디스크 만들기

클러스터에 다음 구성을 적용하여 빈 가상 머신 디스크를 만듭니다.

 apiVersion: vm.cluster.gke.io/v1
 kind: VirtualMachineDisk
 metadata:
   name: DISK_NAME
   namespace: NAMESPACE
 spec:
   size: DISK_SIZE
   storageClassName: robin-block-immediate

다음을 바꿉니다.

  • DISK_NAME: 이 가상 머신 디스크의 이름입니다.
  • NAMESPACE: 타겟 네임스페이스입니다.
  • DISK_SIZE: 원하는 디스크 크기(기비바이트)입니다. 이 값은 가상 머신 이미지 파일의 virtual-size 값보다 커야 합니다. qemu-img info DISK_SIZE 명령어를 사용하여 이 값을 찾을 수 있습니다.

storageClassName 값을 지정하지 않으면 VMRuntime 리소스에 지정된 기본값이 사용됩니다.

가상 네트워킹 구성

네트워킹의 단계에 따라 가상 머신의 가상 네트워킹을 구성합니다.

가상 머신 만들기

이 섹션의 단계를 완료하여 Distributed Cloud 연결 서버 배포에 가상 머신을 만드세요. 이 섹션의 안내는 다양한 시나리오의 구성을 설명하기 위한 예시입니다. 가상 머신 구성에 관한 자세한 내용은 GDC용 VM 런타임을 사용하여 특정 CPU 및 메모리 리소스가 있는 VM 만들기를 참고하세요.

Google Cloud 콘솔을 사용하여 가상 머신 만들기

Google Cloud 콘솔을 사용하여 가상 머신을 만들려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 클러스터 페이지로 이동합니다.

    클러스터로 이동

  2. 대상 Google Cloud 프로젝트를 선택합니다.

  3. (선택사항) 아직 로그인하지 않았다면 대상 클러스터에 로그인합니다.

    1. 왼쪽 탐색창에서 클러스터를 클릭합니다.

    2. Anthos 관리형 클러스터 목록에서 타겟 클러스터를 클릭합니다.

    3. 오른쪽의 정보 창에서 로그인을 클릭합니다.

    4. 표시되는 팝업 대화상자에서 원하는 인증 방법을 선택하고 사용자 인증 정보를 입력한 후 로그인을 클릭합니다.

  4. 가상 머신 페이지로 이동합니다.

    Virtual Machines로 이동

  5. 만들기를 클릭합니다.

  6. 기본사항 섹션에서 다음을 수행합니다.

    1. 이름 필드에 가상 머신의 의미 있는 이름을 입력합니다.

    2. 클러스터 선택 필드에서 가상 머신의 타겟 클러스터를 선택합니다.

    3. 네임스페이스 필드에서 대상 네임스페이스를 선택합니다.

    4. OS 유형 필드에서 타겟 운영체제를 선택합니다.

    5. (선택사항) 이 가상 머신의 구성에 하나 이상의 라벨을 추가하려면 라벨 추가를 클릭합니다.

  7. 머신 구성 섹션에서 다음 중 하나를 수행합니다.

    • 이 가상 머신의 vCPU 수와 메모리 양을 지정하려면 맞춤 구성을 선택하고 타겟 값을 입력한 후 다음을 클릭합니다.

    • 이 가상 머신에 사전 설정된 vCPU 수와 메모리 양을 사용하려면 표준 구성을 선택하고 머신 유형 드롭다운 목록에서 머신 구성을 선택한 후 다음을 클릭합니다.

  8. 스토리지 섹션에서 다음 중 하나를 수행합니다.

    • 이 가상 머신의 새 가상 디스크를 만들려면 새 디스크 추가를 선택하고 이름 필드에 의미 있는 이름을, GiB 필드에 크기(GB)를, 이미지 필드에 URL을 입력합니다.

    • 이 가상 머신에 기존 가상 디스크를 사용하려면 기존 디스크 선택을 선택하고 디스크 선택 드롭다운 목록에서 타겟 디스크 이미지를 선택합니다.

    • 읽기 전용자동 삭제 체크박스를 사용하여 디스크를 읽기 전용으로 할지, 이 가상 머신이 삭제될 때 자동으로 삭제할지 지정합니다.

    • 드라이버 드롭다운 목록에서 가상 디스크 드라이버를 지정합니다.

    • 이 가상 머신에 다른 디스크를 추가하려면 추가 디스크 섹션에서 디스크 추가를 클릭합니다.

    • 다음을 클릭합니다.

  9. 네트워크 섹션에서 다음을 수행합니다.

    1. 기본 네트워크 인터페이스 하위 섹션의 인터페이스 이름 필드에 이 가상 머신의 기본 네트워크 인터페이스 이름을 지정합니다.

    2. 네트워크 유형 드롭다운 목록에서 해당 네트워크 유형을 선택합니다.

    3. 외부 액세스 허용 체크박스를 사용하여 이 네트워크 인터페이스에 대한 외부 액세스를 허용할지 여부를 지정합니다. 이 옵션을 사용 설정한 경우 노출된 포트 필드에 외부로 노출할 포트의 쉼표로 구분된 목록을 입력해야 합니다.

    4. 이 가상 머신에 하나 이상의 보조 네트워크 인터페이스를 추가하려면 네트워크 인터페이스 추가를 클릭합니다.

    5. 다음을 클릭합니다.

  10. 고급 옵션 섹션에서 업데이트 시 자동 다시 시작 체크박스를 사용하여 대상 클러스터의
    Distributed Cloud 연결 소프트웨어가 업데이트된 후 이 가상 머신을 다시 시작할지 지정합니다.

  11. 펌웨어 섹션에서 다음을 수행합니다.

    1. 부트로더 유형 필드에서 타겟 펌웨어 유형을 선택합니다. UEFI 펌웨어를 선택하면 보안 부팅 체크박스를 사용하여 보안 부팅을 사용 설정할 수 있습니다.

    2. 일련번호 필드에 이 가상 머신의 일련번호를 지정합니다.

    3. UUID 필드에 이 가상 머신의 범용 고유 식별자 (UUID)를 지정합니다.

  12. Cloud-init 섹션에서 다음을 수행합니다.

    • 네트워크 데이터 보안 비밀 필드에 네트워크 데이터 보안 비밀 값을 지정합니다.

    • 사용자 데이터 보안 비밀 필드에 사용자 데이터 보안 비밀 값을 지정합니다.

  13. VM 만들기를 클릭하여 가상 머신을 만듭니다.

YAML 파일에서 가상 머신 만들기

YAML 구성 파일에서 가상 머신을 만들려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 클러스터 페이지로 이동합니다.

    클러스터로 이동

  2. 대상 Google Cloud 프로젝트를 선택합니다.

  3. (선택사항) 아직 로그인하지 않았다면 대상 클러스터에 로그인합니다.

    1. 왼쪽 탐색창에서 클러스터를 클릭합니다.

    2. Anthos 관리형 클러스터 목록에서 타겟 클러스터를 클릭합니다.

    3. 오른쪽의 정보 창에서 로그인을 클릭합니다.

    4. 표시되는 팝업 대화상자에서 원하는 인증 방법을 선택하고 사용자 인증 정보를 입력한 후 로그인을 클릭합니다.

  4. 가상 머신 페이지로 이동합니다.

    Virtual Machines로 이동

  5. YAML로 만들기를 클릭합니다.

  6. 클러스터 선택 필드에서 가상 머신의 타겟 클러스터를 선택합니다.

  7. 가상 머신 구성을 YAML 형식으로 YAML 필드에 붙여넣습니다.

  8. 만들기를 클릭합니다.

부팅 가능한 디스크 이미지에서 가상 머신 만들기

부팅 가능한 디스크 이미지에서 가상 머신을 만들려면 클러스터에 다음 구성을 적용하세요.

kind: VirtualMachine
metadata:
  name: my-virtual-machine
  namespace: my-vm-namespace
spec:
  osType: Linux/Windows
  guestEnvironment: {} // comment out this line to enable guest environment for access management
  autoRestartOnConfigurationChange: true 
  compute:
    cpu:
      vcpus: 6
    memory:
      capacity: 8Gi
  interfaces:
      - name: eth0
        networkName: network-410
        ipAddresses:
        - 10.223.237.10/25
  disks:
    - virtualMachineDiskName: my-boot-disk
      boot: true
    - virtualMachineDiskName: my-data-disk

다음을 바꿉니다.

  • DISK_NAME: 이 가상 머신 디스크의 이름입니다.
  • NAMESPACE: 타겟 네임스페이스입니다.

ISO 광 디스크 이미지에서 가상 머신 만들기

ISO 광 디스크 이미지에서 가상 머신을 만들려면 Google Distributed Cloud에서 ISO 이미지로 Windows VM 만들기의 단계를 완료하세요.

GPU 지원을 사용하는 가상 머신 만들기

이 페이지에 설명된 단계를 완료하여 비즈니스 요구사항을 충족하도록 구성된 가상 머신을 만든 다음 GPU 리소스를 사용하도록 가상 머신 구성의 단계를 완료합니다.

가상 머신 액세스

이 섹션의 단계를 완료하여 Distributed Cloud 연결 서버 배포에서 실행되는 가상 머신에 액세스합니다.

액세스 사용자 인증 정보 가져오기

이 섹션의 단계를 완료하여 Linux 게스트 환경 기능을 사용하여 가상 머신에 액세스하는 데 필요한 사용자 인증 정보를 가져옵니다.

  1. 클러스터에 다음 구성을 적용하여 타겟 가상 머신의 Linux 게스트 환경을 사용 설정합니다.

    kind: VirtualMachine
    metadata:
     name: my-virtual-machine
     namespace: my-vm-namespace
    spec:
     osType: Linux
     guestEnvironment: {}
     autoRestartOnConfigurationChange: true 
  2. 다음 명령어를 사용하여 SSH 키 쌍이 포함된 id_rsa.pub 파일을 생성합니다.

    ssh-keygen -t rsa
  3. 클러스터에 다음 구성을 적용하여 VirtualMachineAccessRequest 리소스를 만듭니다.

    apiVersion: vm.cluster.gke.io/v1alpha1
    kind: VirtualMachineAccessRequest
    metadata:
     name: RESOURCE_NAME
     namespace: NAMESPACE
    spec:
      vm: VM_NAME
      user: USER_NAME
      ssh:
        key: RSA_KEY
        ttl: 2h

다음을 바꿉니다.

  • RESOURCE_NAME: 이 가상 머신 액세스 요청 리소스의 설명이 포함된 이름입니다.
  • NAMESPACE: 타겟 네임스페이스입니다.
  • VM_NAME: 대상 가상 머신의 이름입니다.
  • USER_NAME: 액세스 권한이 부여되는 사용자의 이름입니다.
  • RSA_KEY: 이전 단계에서 생성한 id_rsa.pub 파일의 콘텐츠입니다.
  1. 다음 명령어를 사용하여 액세스 요청 상태를 확인합니다.

    kubectl get vmar
    

    명령어가 Configured 상태를 반환하면 다음 단계로 진행합니다.

  2. SSH 또는 원격 데스크톱으로 가상 머신에 액세스합니다.

    • 가상 머신이 로컬 네트워크에 연결되어 있으면 직접 액세스할 수 있습니다.
    • 가상 머신이 포드 네트워크에 연결된 경우 필요한 포트에 액세스하려면 부하 분산기 서비스를 만들어야 합니다.

가상 머신 시작, 다시 시작 또는 중지

다음 명령어를 사용하여 가상 머신을 시작, 다시 시작 또는 중지합니다.

  • 가상 머신 시작: kubectl virt start vmVM_NAME-nNAMESPACE
  • 가상 머신 다시 시작: kubectl virt restart vmVM_NAME-nNAMESPACE
  • 가상 머신 중지: kubectl virt stop vmVM_NAME-nNAMESPACE

다음을 바꿉니다.

  • VM_NAME: 대상 가상 머신의 이름입니다.
  • NAMESPACE: 타겟 네임스페이스입니다.

Google Cloud 콘솔을 사용하여 가상 머신 시작 또는 중지

  1. Google Cloud 콘솔에서 클러스터 페이지로 이동합니다.

    클러스터로 이동

  2. 대상 Google Cloud 프로젝트를 선택합니다.

  3. (선택사항) 아직 로그인하지 않았다면 대상 클러스터에 로그인합니다.

    1. 왼쪽 탐색창에서 클러스터를 클릭합니다.

    2. Anthos 관리형 클러스터 목록에서 타겟 클러스터를 클릭합니다.

    3. 오른쪽의 정보 창에서 로그인을 클릭합니다.

    4. 표시되는 대화상자에서 원하는 인증 방법을 선택하고 사용자 인증 정보를 입력한 다음 로그인을 클릭합니다.

  4. 가상 머신 페이지로 이동합니다.

    Virtual Machines로 이동

  5. 가상 머신 목록에서 대상 가상 머신의 체크박스를 선택합니다.

  6. 페이지 상단에서 시작 또는 중지를 클릭합니다.

Google Cloud 콘솔을 사용하여 가상 머신 상태 보기

  1. Google Cloud 콘솔에서 클러스터 페이지로 이동합니다.

    클러스터로 이동

  2. 대상 Google Cloud 프로젝트를 선택합니다.

  3. (선택사항) 아직 로그인하지 않았다면 대상 클러스터에 로그인합니다.

    1. 왼쪽 탐색창에서 클러스터를 클릭합니다.

    2. Anthos 관리형 클러스터 목록에서 타겟 클러스터를 클릭합니다.

    3. 오른쪽의 정보 창에서 로그인을 클릭합니다.

    4. 표시되는 팝업 대화상자에서 원하는 인증 방법을 선택하고 사용자 인증 정보를 입력한 후 로그인을 클릭합니다.

  4. 가상 머신 페이지로 이동합니다.

    Virtual Machines로 이동

  5. 타겟 가상 머신을 클릭합니다.

  6. 표시되는 페이지에서 세부정보, 이벤트, YAML 탭을 클릭하여 이 가상 머신에 관한 해당 정보를 확인합니다.

가상 머신 수정

가상 머신을 수정하려면 가상 머신을 삭제하고 업데이트된 구성으로 다시 만들어야 합니다.

Google Cloud 콘솔을 사용하여 가상 머신 삭제

  1. Google Cloud 콘솔에서 클러스터 페이지로 이동합니다.

    클러스터로 이동

  2. 대상 Google Cloud 프로젝트를 선택합니다.

  3. (선택사항) 아직 로그인하지 않았다면 대상 클러스터에 로그인합니다.

    1. 왼쪽 탐색창에서 클러스터를 클릭합니다.

    2. Anthos 관리형 클러스터 목록에서 타겟 클러스터를 클릭합니다.

    3. 오른쪽의 정보 창에서 로그인을 클릭합니다.

    4. 표시되는 대화상자에서 원하는 인증 방법을 선택하고 사용자 인증 정보를 입력한 다음 로그인을 클릭합니다.

  4. 가상 머신 페이지로 이동합니다.

    Virtual Machines로 이동

  5. 가상 머신 목록에서 대상 가상 머신의 체크박스를 선택합니다.

  6. 페이지 상단에서 삭제를 클릭합니다.

  7. 확인 대화상자가 표시되면 가상 머신의 이름을 입력하고 삭제를 클릭합니다.

가상 머신 백업

이 섹션에서는 가상 머신 워크로드 백업을 위해 환경을 구성하는 방법과 백업을 관리하는 방법을 설명합니다. 이 기능을 사용 설정하려면 Google 담당자에게 문의하세요.

기본 요건

  1. 아직 만들지 않았다면 다음 콘텐츠로 StorageClass 유형의 robin-block-immediate 커스텀 리소스를 만들어 클러스터에 적용합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: robin-block-immediate
     annotations:
       storageclass.kubernetes.io/is-default-class: "true"
    parameters:
     faultdomain: host
     replication: "3"
     blocksize:   "512"
    provisioner: robin
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
  2. 아직 만들지 않았다면 다음 콘텐츠로 VolumeSnapshotClass 유형의 robin-snapshotclass 맞춤 리소스를 만들어 클러스터에 적용합니다.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
     name: robin-snapshotclass
     labels:
       app.kubernetes.io/instance: robin
       app.kubernetes.io/managed-by: robin.io
       app.kubernetes.io/name: robin
     annotations:
       snapshot.storage.kubernetes.io/is-default-class: "true"
    driver: robin
    deletionPolicy: Delete

온라인 백업 저장소 만들기

온라인 백업 저장소는 가상 머신 백업을 위한 S3 호환 온라인 스토리지 위치입니다. 또한 백업, 백업 계획, 복원 계획의 레코드를 저장하고 가상 머신 백업을 복원하기 위한 대상으로 사용됩니다.

다음 단계를 완료하여 가상 머신의 온라인 백업 저장소를 만드세요.

  1. 버킷 만들기에 설명된 대로 Cloud Storage 버킷을 만듭니다.

  2. 다음 명령어를 사용하여 버킷에 액세스할 서비스 계정과 키를 만듭니다.

    export PROJECT_ID=$(gcloud config get-value project)
    export SVC_ACCOUNT=backup-access
    gcloud iam service-accounts create $SVC_ACCOUNT
    gcloud projects add-iam-policy-binding $PROJECT_ID \ 
       --member="serviceAccount:${SVC_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/backupdr.cloudStorageOperator"
    gcloud storage hmac create  ${SVC_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com > hmac_temp_key_file
    awk 'NR==1{print "ACCESS_ID=" $NF} NR==2{print "SECRET=" $NF}' < hmac_temp_key_file > hmac_key_file
  3. 다음 명령어를 사용하여 백업 버킷에 액세스하기 위한 보안 비밀을 구성합니다.

    source ./hmac_key_file
    kubectl create secret generic SECRET_NAME \
       --from-literal=access-key=$SECRET \
       --from-literal=access-key-id=$ACCESS_ID -n NAMESPACE
    

    다음을 바꿉니다.

    • SECRET_NAME: 이 보안 비밀의 설명 이름입니다.
    • NAMESPACE: 타겟 네임스페이스입니다.
  4. 다음 구성을 클러스터에 적용하여 BackupRepository 리소스를 만듭니다.

    apiVersion: backup.gdc.goog/v1
    kind: BackupRepository
    metadata:
      name: "REPOSITORY_NAME"
    spec:
      secretReference:
        namespace: NAMESPACE
        name: gcs-hmac-secret
      endpoint: "https://storage.googleapis.com"
      type: "S3"
      s3Options:
        bucket: "BUCKET_NAME"
        region: "REGION"
        forcePathStyle: true
      importPolicy: "ReadWrite"
    # Force attachment for convenience.
    force: true

    다음을 바꿉니다.

    • REPOSITORY_NAME: 저장소에 대한 설명이 포함된 이름입니다.
    • BUCKET_NAME: 백업 버킷의 이름입니다.
    • NAMESPACE: 타겟 네임스페이스입니다.
    • REGION: 대상 Distributed Cloud 클러스터가 생성된 Google Cloud 리전입니다.
  5. 다음 명령어를 사용하여 클러스터가 백업 저장소에 액세스할 수 있는지 확인합니다.

    kubectl get BackupRepository
    

로컬 백업 저장소 만들기

로컬 백업 저장소는 Distributed Cloud 연결 클러스터에 로컬로 있는 가상 머신 백업용 S3 호환 스토리지 위치입니다. 로컬 백업 저장소는 기능적으로 온라인 백업 저장소와 동일합니다.

  1. 애플리케이션 수준 구성 암호화에 사용할 AES256 암호화 키를 생성합니다.

    openssl rand -base64 32
    

    이 명령어는 base64로 인코딩된 임의의 256비트 키를 출력합니다. 예를 들면 다음과 같습니다.

    aBcD_eFgH1iJkLmN0pQrStUvWxFyZgAhIjKlMnOpQ=
    
  2. BackupRepository 리소스의 YAML 구성에서 페이로드로 사용할 키를 이중 인코딩합니다.

    echo -n "AES_KEY" | base64
    

    AES_KEY를 이전 단계에서 생성한 base64 인코딩된 AES256 키로 바꿉니다. 이 키를 로컬 파일에 저장합니다.

  3. 다음 명령어를 사용하여 백업 저장소에 액세스하기 위한 보안 비밀을 구성합니다.

    kubectl create secret generic SECRET_NAME \
       --from-literal=access-key=ENCODED_AES_KEY \
       --namespace NAMESPACE
    

    다음을 바꿉니다.

    • ENCODED_AES_KEY: 이전 단계에서 생성한 이중 인코딩된 AES256 키입니다.
    • SECRET_NAME: 이 보안 비밀의 설명 이름입니다.
    • NAMESPACE: 타겟 네임스페이스입니다.
  4. 클러스터에 다음 구성을 적용하여 BackupRepository를 구성합니다.

    apiVersion: backup.gdc.goog/v1
    kind: BackupRepository
    metadata:
      name: REPOSITORY_NAME
    spec:
      force: true
      importPolicy: ReadWrite
      localOptions:
        encryptionKey:
          name: SECRET_NAME
          namespace: NAMESPACE
      type: Local
  5. 다음 명령어를 사용하여 클러스터가 백업 저장소에 액세스할 수 있는지 확인합니다.

    kubectl get BackupRepository
    

    다음을 바꿉니다.

    • REPOSITORY_NAME: 저장소에 대한 설명이 포함된 이름입니다.
    • SECRET_NAME: 이전 단계에서 만든 Kubernetes 보안 비밀의 이름입니다.
    • NAMESPACE: Kubernetes 보안 비밀을 만든 네임스페이스입니다.

백업 계획 만들기

백업 계획은 가상 머신 백업 실행을 위한 자동 일정을 정의합니다. 다음 콘텐츠로 VirtualMachineBackupPlan 리소스를 만들고 클러스터에 적용합니다.

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachineBackupPlan
metadata:
  name: BACKUP_PLAN_NAME
  namespace: NAMESPACE
spec:
  backupConfig:
    backupRepository: REPOSITORY_NAME
    backupScope:
      selectedVirtualMachines:
      - resourceName: VM_NAME
    volumeStrategy: LocalSnapshotOnly
  backupSchedule:
    cronSchedule: "CRON_SCHEDULE"
    paused: PAUSED
  retentionPolicy:
    backupDeleteLockDays: PLAN_LOCK_LENGTH
    backupRetainDays: 4
    locked: RETENTION_POLICY_LOCKED
  numBackupsToRetain: BACKUPS_RETAINED

다음을 바꿉니다.

  • BACKUP_PLAN_NAME: 백업 계획을 설명하는 이름입니다.
  • NAMESPACE: 타겟 네임스페이스의 이름입니다.
  • REPOSITORY_NAME: 대상 백업 저장소입니다.
  • CRON_SCHEDULE: 백업 실행을 위한 cron 표준 일정입니다. 백업 간에 허용되는 최소 간격은 10분입니다.
  • PAUSED: 이 백업 계획이 일시중지되었는지 여부를 지정합니다. 유효한 값은 truefalse입니다.
  • VM_NAME: 이 백업 계획을 통해 백업할 가상 머신 워크로드를 지정합니다. 백업 계획당 여러 가상 머신 리소스를 지정할 수 있습니다.
  • * BACKUP_LOCK_LENGTH: 백업 생성 후 백업을 삭제할 수 없는 기간의 일수를 지정합니다.
  • * BACKUP_RETENTION_LENGTH: 이 백업을 보관할 일수를 지정합니다. 보관 기간이 지나면 백업이 삭제됩니다. 생략하면 기본값은 4입니다.
  • * RETENTION_POLICY_LOCKED: 이 백업 계획의 보관 정책이 잠겨 있는지 여부를 지정합니다. 유효한 값은 truefalse입니다.
  • * BACKUPS_RETAINED/var>: 이 백업 계획에서 보관할 백업 수를 지정합니다. 이 기준점에 도달하면 백업이 오래된 순서대로 삭제됩니다.

기존 백업 계획 나열

기존 백업 계획을 나열하려면 다음 명령어를 사용합니다.

kubectl get VirtualMachineBackupPlans -A

이 명령어는 다음과 유사한 출력을 반환합니다.

NAMESPACE      NAME                                LASTBACKUPTIME   LASTBACKUPSTATE   NEXTBACKUPTIME   PAUSED
vm-workloads   bkp-template-vm-windows-vm-local
vm-workloads   sched-snapshotonly-bkp-plan-10min                                                       false

가상 머신의 수동 백업 만들기

이 섹션의 단계를 완료하여 가상 머신의 수동 백업을 만드세요.

  1. 클러스터에 다음 구성을 적용하여 타겟 가상 머신이 있는 네임스페이스에 VirtualMachineBackupPlanTemplate 리소스를 만듭니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineBackupPlanTemplate
    metadata:
      name: TEMPLATE_NAME
      namespace: NAMESPACE
    spec:
      backupRepository: REPOSITORY_NAME

    다음을 바꿉니다.

    • TEMPLATE_NAME: 이 백업 템플릿의 설명 이름입니다.
    • REPOSITORY_NAME: 대상 백업 저장소의 이름입니다.
    • NAMESPACE: 타겟 네임스페이스입니다.
  2. 다음 구성으로 VirtualMachineBackupRequest 리소스를 만들어 클러스터에 적용하여 백업을 트리거합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineBackupRequest
    metadata:
      name: BACKUP_REQUEST_NAME
      namespace: NAMESPACE
    spec:
      vmBackupPlanTemplate: TEMPLATE_NAME
      virtualMachine: VM_NAME
      vmBackupName: BACKUP_NAME

    다음을 바꿉니다.

    • BACKUP_REQUEST_NAME: 이 백업 요청의 설명 이름입니다.
    • TEMPLATE_NAME: 이전 단계에서 만든 백업 템플릿의 이름입니다.
    • NAMESPACE: 타겟 네임스페이스의 이름입니다.
    • VM_NAME: 대상 가상 머신의 이름입니다.
    • BACKUP_NAME: 이 백업의 설명 이름입니다.
  3. 다음 명령어를 사용하여 백업의 무결성을 확인합니다.

    kubectl get vmbackup BACKUP_NAME -n NAMESPACE
    

    다음을 바꿉니다.

    • BACKUP_NAME: 대상 백업의 이름입니다.
    • NAMESPACE: 타겟 네임스페이스입니다.

    이 명령어는 다음과 유사한 출력을 반환합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineBackup
    metadata:
      creationTimestamp: "2024-04-09T17:57:44Z"
      finalizers:
      - vm.cluster.gke.io/virtual-machine-backup-finalizer
      generation: 1
      name: vmt13-backup-0409-2
      namespace: default
      ownerReferences:
      - apiVersion: backup.gdc.goog/v1
        kind: Backup
        name: vmt13-backup-0409-2
        uid: 0ee0b92c-1e27-48cc-8f8f-5606ea925e88
      resourceVersion: "36192759"
      uid: e471f8c7-637c-485f-acda-108017a5638f
    spec:
      backupConfig:
        backupRepository: default
        backupScope:
          selectedVirtualMachines:
          - resourceName: vm-t13
        volumeStrategy: Portable
      vmBackupPlan: MyVmPlan-vm-vm-t13-portable
    status:
      backedUpVirtualMachineDisks:
      - vm-t13-boot-disk
      - vm-t13-data-disk
      backedUpVirtualMachines:
      - vm-t13
      backup: vmt13-backup-0409-2
      backupStatus:
        clusterMetadata:
          k8sVersion: "1.28"
        completeTime: "2024-04-09T18:07:36Z"
        createTime: "2024-04-09T17:57:44Z"
        jobCreated: true
        resourceCount: 849
        sizeBytes: 1948672
        state: Succeeded
    

가상 머신 백업 나열

기존 가상 머신 백업을 보려면 다음 명령어를 사용합니다.

kubectl get VirtualMachineBackups -A

이 명령어는 다음과 유사한 출력을 반환합니다.

NAMESPACE      NAME        STATE       CREATETIME
vm-workloads   vm-backup   Succeeded   2025-04-08T04:37:32Z

백업에서 가상 머신 복원

이 섹션의 단계를 완료하여 백업에서 가상 머신을 복원합니다.

  1. 다음 구성으로 VirtualMachineRestoreRequest 리소스를 만들어 클러스터에 적용하여 복원 프로세스를 트리거합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineRestoreRequest
    metadata:
      name: restore-req
      namespace: NAMESPACE
    spec:
      vmBackup: BACKUP_NAME
      restoreName: RESTORE_NAME
      restoredResourceName: RESTORED_VM_NAME
      restoredResourceDescription: RESTORE_DESCRIPTION

    다음을 바꿉니다.

    • BACKUP_NAME: 대상 백업의 이름입니다.
    • RESTORE_NAME: 이 복원 작업의 설명 이름입니다.
    • NAMESPACE: 타겟 네임스페이스입니다.
    • RESTORED_VM_NAME: 복원 중에 가상 머신에 부여된 이름입니다. 이 이름은 클러스터에 이미 있는 가상 머신과 충돌하지 않아야 합니다.
    • RESTORE_DESCRIPTION: 이 복원 작업에 대한 설명입니다.
  2. 다음 명령어를 사용하여 복원 작업의 진행 상황을 확인합니다.

    kubectl get virtualmachinerestores.vm.cluster.gke.io RESTORE_NAME -n NAMESPACE
    

    다음을 바꿉니다.

    • RESTORE_NAME: 대상 복원 작업의 이름입니다.
    • NAMESPACE: 타겟 네임스페이스입니다.

    이 명령어는 다음과 유사한 출력을 반환합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineRestore
    metadata:
      creationTimestamp: "2024-04-09T18:09:51Z"
      finalizers:
      - vm.cluster.gke.io/virtual-machine-restore-finalizer
      generation: 1
      name: vmt13-restore-0409-2-1
      namespace: default
      ownerReferences:
      - apiVersion: backup.gdc.goog/v1
        kind: Restore
        name: vmt13-restore-0409-2-1
        uid: 4ce1ca83-eba0-4cc3-bad3-af6cf9185d7d
      resourceVersion: "36194596"
      uid: aba50b59-e18d-4687-ad11-47baa45478b4
    spec:
      targetVirtualMachineDisks:
      - vm-t13-boot-disk
      - vm-t13-data-disk
      targetVirtualMachines:
      - vm-t13
      vmBackup: vmt13-backup-0409-2
    status:
      restore: vmt13-restore-0409-2-1
      restoreStatus:
        completeTime: "2024-04-09T18:10:00Z"
        jobCreated: true
        resourcesRestoredCount: 5
        restoredVolumesCount: 2
        startTime: "2024-04-09T18:09:51Z"
        state: Succeeded
        stateReason: restore is successful
    

복원 작업 보기

지금까지 시작된 복원 작업을 보려면 다음 명령어를 사용하세요.

kubectl get VirtualMachineRestore.vm.cluster.gke.io -A

이 명령어는 다음과 유사한 출력을 반환합니다.

NAMESPACE      NAME        STARTTIME              RESTORE     STATE
vm-workloads   restore-1   2025-04-08T04:41:04Z   restore-1   Succeeded

가상 머신 백업 삭제

가상 머신 백업을 삭제하려면 다음 구성으로 VirtualMachineDeleteBackupRequest 리소스를 만들고 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDeleteBackupRequest
    metadata:
      name: vmdbr
      namespace: BACKUP_NAME
    spec:
      vmBackup: NAMESPACE
   

다음을 바꿉니다.

  • NAMESPACE: 타겟 네임스페이스의 이름입니다.
  • BACKUP_NAME: 대상 백업의 이름입니다.

AppArmor 샌드박싱 감사 로그 보기

Distributed Cloud는 audit-modeAppArmor 정책을 사용하여 가상 머신 워크로드를 자동으로 샌드박스로 처리합니다. 정책 위반은 감사 로그 항목을 내보냅니다. 예를 들면 다음과 같습니다.

{
  "jsonPayload": {
    "_SOURCE_REALTIME_TIMESTAMP": "1734596844149104",
    "SYSLOG_TIMESTAMP": "Dec 19 08:27:24 ",
    "MESSAGE": "type=AVC msg=audit(1734596844.148:27742): apparmor=\"ALLOWED\" operation=\"open\" profile=\"virt-launcher-audit\" name=\"/etc/libvirt/virtlogd.conf\" pid=182406 comm=\"virtlogd\" requested_mask=\"r\" denied_mask=\"r\" fsuid=0 ouid=0 FSUID=\"root\" OUID=\"root\"",
    "PRIORITY": "6",
    ...
    "SYSLOG_RAW": "<14>Dec 19 08:27:24 audisp-syslog: type=AVC msg=audit(1734596844.148:27742): apparmor=\"ALLOWED\" operation=\"open\" profile=\"virt-launcher-audit\" name=\"/etc/libvirt/virtlogd.conf\" pid=182406 comm=\"virtlogd\" requested_mask=\"r\" denied_mask=\"r\" fsuid=0 ouid=0 FSUID=\"root\" OUID=\"root\"\n",
    "SYSLOG_IDENTIFIER": "audisp-syslog",
    "_GID": "0",
  },
  "timestamp": "2024-12-19T08:27:24.149109Z",
  "labels": {
    "gke.googleapis.com/log_type": "system"
  },
  "receiveTimestamp": "2024-12-19T08:27:24.721842807Z"
  ...
  ...
}

다음 단계