가상 머신 관리

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

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

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

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

기본적으로 Distributed Cloud에서는 GDC 가상 머신 지원의 VM 런타임이 사용 중지되어 있습니다. 이 기능을 사용 설정하려면 이 섹션의 단계를 완료하세요. 이 섹션의 안내에서는 완전히 작동하는 Distributed Cloud 클러스터가 있다고 가정합니다.

Distributed Cloud에서 GDC용 VM 런타임 지원을 구성하는 VMRuntime 리소스는 enableGPU 매개변수를 사용하여 클러스터에서 GPU 지원도 구성합니다. 워크로드 요구사항에 따라 두 매개변수를 구성해야 합니다. Distributed Cloud 클러스터에서 GDC용 VM 런타임 지원을 사용 설정하기 위해 GPU 지원을 사용 설정할 필요는 없습니다.

다음 표에서는 사용 가능한 구성을 설명합니다.

enable enableGPU 결과 구성
false false 워크로드는 컨테이너에서만 실행되며 GPU 리소스를 사용할 수 없습니다.
false true 워크로드는 컨테이너에서만 실행되며 GPU 리소스를 사용할 수 있습니다.
true true 워크로드는 가상 머신과 컨테이너에서 실행할 수 있습니다.
두 유형의 워크로드 모두 GPU 리소스를 사용할 수 있습니다.
true false 워크로드는 가상 머신과 컨테이너에서 실행할 수 있습니다.
두 유형의 워크로드 모두 GPU 리소스를 사용할 수 없습니다.

GPU 지원을 이미 사용 설정한 경우 VMRuntime 리소스를 수정하여 enable 매개변수를 추가하고 값을 true로 설정한 다음 Distributed Cloud 클러스터에 적용합니다.

GDC 가상 머신 하위 시스템에서 VM 런타임 사용 설정

GDC 가상 머신 하위 시스템에서 VM 런타임을 사용 설정하려는 클러스터의 유형에 따라 다음 중 하나를 수행합니다.

  • Cloud 컨트롤 플레인 클러스터의 경우 VMRuntime 리소스를 수동으로 만들어야 합니다.
  • 로컬 제어 영역 클러스터의 경우 기존 VMRuntime 리소스를 수정해야 합니다.

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

  1. 타겟 클러스터 유형에 따라 다음 콘텐츠로 VMRuntime 커스텀 리소스를 만들거나 수정하고 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      # Enable Anthos VM Runtime support
      enabled: true
      # vmImageFormat defaults to "raw" if not set
      vmImageFormat: "raw"

    vmImageFormat 매개변수의 값을 변경하지 마세요. Distributed Cloud는 다른 가상 디스크 형식을 지원하지 않습니다.

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

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

    kubectl get vmruntime -o yaml

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

     - apiVersion: vm.cluster.gke.io/v1
       kind: VMRuntime
       metadata:
         name: vmruntime
         ...
       spec:
         enabled: true
         vmImageFormat: raw
       status:
         ...
       ready: true
         ...
    
  3. 다음 명령어를 사용하여 클러스터에서 GDC용 VM 런타임 가상 머신 지원이 사용 설정되었는지 확인합니다.

    kubectl get pods -n vm-system

    이 명령어는 다음 예와 같이 클러스터에서 실행되는 GDC 하위 시스템 포드의 VM 런타임을 보여주는 출력을 반환합니다.

    NAME                                                READY   STATUS         RESTARTS        AGE
    cdi-apiserver-6c76c6cf7b-n68wn                      1/1     Running        0               132m
    cdi-deployment-f78fd599-vj7tv                       1/1     Running        0               132m
    cdi-operator-65c4df9647-fcb9d                       1/1     Running        0               134m
    cdi-uploadproxy-7765ffb694-6j7bf                    1/1     Running        0               132m
    macvtap-fjfjr                                       1/1     Running        0               134m
    virt-api-77dd99dbbb-bs2fb                           1/1     Running        0               132m
    virt-api-77dd99dbbb-pqc27                           1/1     Running        0               132m
    virt-controller-5b44dbbbd7-hc222                    1/1     Running        0               132m
    virt-controller-5b44dbbbd7-p8xkk                    1/1     Running        0               132m
    virt-handler-n76fs                                  1/1     Running        0               132m
    virt-operator-86565697d9-fpxqh                      2/2     Running        0               134m
    virt-operator-86565697d9-jnbt7                      2/2     Running        0               134m
    vm-controller-controller-manager-7844d5fb7b-72d8m   2/2     Running        0               134m
    vmruntime-controller-manager-845649c847-m78r9       2/2     Running        0               175m
    

대상 네임스페이스에 Distributed Cloud 레지스트리에 대한 액세스 권한 부여

이 섹션의 단계는 클라우드 컨트롤 플레인 클러스터에만 적용됩니다. 로컬 컨트롤 플레인 클러스터에서 GDC 가상 머신 하위 시스템의 VM 런타임을 구성하는 경우 이 섹션을 건너뛰세요.

네임스페이스에서 가상 머신을 만들려면 먼저 해당 네임스페이스에 Distributed Cloud 레지스트리에 대한 액세스 권한을 부여해야 합니다. 레지스트리에는 대상 네임스페이스에서 가상 머신을 만들고 배포하는 데 필요한 구성요소가 있습니다. Distributed Cloud 시스템 관리를 위해 예약된 네임스페이스에서는 가상 머신을 실행할 수 없습니다. 자세한 내용은 관리 네임스페이스 제한사항을 참고하세요.

다음 단계를 완료하여 타겟 네임스페이스에 Distributed Cloud 레지스트리에 대한 액세스 권한을 부여하세요.

  1. gcr-pull라는 이름의 imagePullSecret 키를 사용하여 타겟 네임스페이스의 기본 서비스 계정을 패치합니다.

    kubectl patch sa default -p "{\"imagePullSecrets\": [{\"name\": \"gcr-pull\"}]}" -n NAMESPACE

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

  2. 타겟 네임스페이스에서 연결된 보안 비밀을 새로고침합니다.

    # Delete existing secret.
    kubectl delete secret gcr-pull -n NAMESPACE --ignore-not-found
    # Copy the new secret to the target namespace.
    kubectl get secret gcr-pull -n vm-system -o yaml | sed "s/namespace: vm-system/namespace: NAMESPACE/g" | kubectl apply -f -

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

    보안 비밀은 1시간 후에 만료됩니다. 만료된 후에는 수동으로 새로고침해야 합니다.

virtctl 관리 도구 설치

Distributed Cloud Cluster에서 가상 머신을 관리하려면 virtctl 클라이언트 도구가 필요합니다. 도구를 설치하려면 다음 단계를 완료하세요.

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

    export VERSION=v0.49.0-anthos1.12-gke.7
    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이 플러그인 중 하나로 나열됩니다.

원시 블록 스토리지를 사용하여 Distributed Cloud에 가상 머신 프로비저닝

이 섹션에서는 원시 블록 스토리지를 사용하여 Distributed Cloud 클러스터에 Linux 가상 머신과 Windows 가상 머신을 프로비저닝하는 방법을 보여주는 구성 예를 제공합니다. 예시에서는 PersistentVolume로 인스턴스화된 블록 스토리지를 사용합니다.

원시 블록 스토리지 사용 제한사항

Distributed Cloud에서 원시 블록 스토리지를 사용하여 가상 머신을 실행할 때는 다음 제한사항이 적용됩니다.

  • OSType 필드는 Cloud 컨트롤 플레인 클러스터의 VirtualMachine 리소스 사양에서 지원되지 않습니다. 따라서 Cloud 컨트롤 플레인 클러스터에서 실행되는 가상 머신에 액세스하는 데는 consolevnc 메서드만 지원됩니다.
  • Distributed Cloud는 가상 머신에 파일 시스템 스토리지를 제공하지 않으므로 kubectl virt 명령어를 사용하여 Distributed Cloud 클러스터에서 직접 가상 머신을 만들 수 없습니다.
  • 블록 스토리지 PersistentVolumeClaim 리소스는 qcow2 디스크 이미지 형식을 지원하지 않습니다.
  • 컨테이너화된 데이터 가져오기 도구 (CDI) 플러그인은 플러그인의 스크래치 공간이 파일 시스템 스토리지에서만 작동하므로 블록 스토리지의 DataVolume 리소스를 지원하지 않습니다. 자세한 내용은 스크래치 공간을 참고하세요.

원시 블록 스토리지를 사용하여 분산 클라우드에 Linux 가상 머신 프로비저닝

다음 예시에서는 Ubuntu Server 22.04를 실행하는 원시 블록 스토리지가 있는 Linux 가상 머신을 프로비저닝하는 방법을 보여줍니다. 설치 소스는 Ubuntu Server 22.04 ISO 디스크 이미지입니다.

  1. Ubuntu Server 설치 디스크 이미지에 대해 다음 콘텐츠로 PersistentVolumeClaim 리소스를 만든 후 클러스터에 적용합니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      labels:
        app: containerized-data-importer
      name: iso-ubuntu
      annotations:
        cdi.kubevirt.io/storage.import.endpoint: "https://releases.ubuntu.com/jammy/ubuntu-22.04.3-live-server-amd64.iso"
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: local-block
      volumeMode: Block
      resources:
        requests:
          storage: 5Gi
  2. 가상 머신의 가상 하드 디스크에 대해 다음 콘텐츠로 PersistentVolumeClaim 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ubuntuhd
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 15Gi
      storageClassName: local-block
      volumeMode: Block
  3. Ubuntu Server 설치 디스크 이미지에 대해 다음 콘텐츠로 VirtualMachineDisk 리소스를 만든 후 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: "ubuntu-iso-disk"
    spec:
      persistentVolumeClaimName: iso-ubuntu
      diskType: cdrom
  4. 가상 머신의 가상 하드 디스크에 대해 다음 콘텐츠로 VirtualMachineDisk 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: "ubuntu-main-disk"
    spec:
      persistentVolumeClaimName: ubuntuhd
  5. 가상 머신의 구성을 지정하는 다음 콘텐츠로 VirtualMachineType 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  6. 다음 콘텐츠를 사용하여 VirtualMachine 리소스를 만들어 클러스터에서 가상 머신을 인스턴스화하고 시작한 다음 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: ubu-vm
      name: ubu-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Linux
      compute:
        virtualMachineTypeName: small-2-20
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - virtualMachineDiskName: ubuntu-main-disk
          boot: true
        - virtualMachineDiskName: ubuntu-iso-disk

    osType 필드는 로컬 컨트롤 플레인 클러스터에만 적용됩니다. 다음 기능을 구성하려면 로컬 컨트롤 플레인 클러스터에서 필요합니다.

  7. 가상 머신에 Ubuntu Server를 설치합니다.

    1. importer 포드가 Ubuntu Server 설치 디스크 이미지를 다운로드할 때까지 기다립니다.
    2. 가상 머신의 상태를 확인합니다.

      kubectl get gvm VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 ubu-vm)으로 바꿉니다.

    3. 가상 머신에 로그온합니다.

      kubectl virt vnc VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 ubu-vm)으로 바꿉니다.

    4. Ubuntu Linux 설치 단계를 완료합니다.

  8. 삭제:

    1. 가상 머신을 중지합니다.

      kubectl virt stop VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 ubu-vm)으로 바꿉니다.

    2. 가상 머신의 YAML 파일을 수정하여 설치 디스크 이미지에 대한 참조를 삭제합니다.

      kubectl edit gvm VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 ubu-vm)으로 바꿉니다.

    3. 가상 머신을 시작합니다.

      kubectl virt start VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 ubu-vm)으로 바꿉니다.

    4. 설치 디스크 이미지의 VirtualMachineDiskPersistentVolumeClaim 리소스를 삭제합니다.

      kubectl delete virtualmachinedisk ubuntu-iso-disk
      kubectl delete pvc iso-ubuntu

원시 블록 스토리지를 사용하여 Distributed Cloud에 Windows 가상 머신 프로비저닝

다음 예에서는 원시 블록 스토리지를 사용하여 Windows 가상 머신을 프로비저닝하는 방법을 보여줍니다. 이 단계는 Windows를 설치하는 데 필요한 virtio 드라이버 디스크 이미지를 추가하는 것을 제외하고 Linux 가상 머신을 프로비저닝하는 것과 유사합니다.

  1. 라이선스가 부여된 Windows 사본과 설치 미디어 이미지를 획득합니다.

  2. Windows 설치 디스크 이미지에 대해 다음 콘텐츠를 사용하여 PersistentVolumeClaim 리소스를 만든 다음 클러스터에 적용합니다. 자세한 내용은 이미지에서를 참고하세요.

  3. virtio 드라이버에 다음 콘텐츠가 포함된 PersistentVolumeClaim 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      labels:
        app: containerized-data-importer
      name: virtio-driver
      annotations:
        cdi.kubevirt.io/storage.import.endpoint: "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso"
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: local-block
      volumeMode: Block
      resources:
        requests:
          storage: 1Gi
  4. 가상 머신의 가상 하드 디스크에 대해 다음 콘텐츠로 PersistentVolumeClaim 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: windowshd
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 15Gi
      storageClassName: local-block
      volumeMode: Block
  5. Windows 설치 디스크 이미지에 대해 다음 콘텐츠로 VirtualMachineDisk 리소스를 만든 후 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: "windows-iso-disk"
    spec:
      persistentVolumeClaimName: iso-windows
      diskType: cdrom
  6. virtio 드라이버에 다음 콘텐츠가 포함된 VirtualMachineDisk 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: "win-virtio-driver"
    spec:
      persistentVolumeClaimName: virtio-driver
      diskType: cdrom
  7. 가상 머신의 가상 하드 디스크에 대해 다음 콘텐츠로 VirtualMachineDisk 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: "windows-main-disk"
    spec:
      persistentVolumeClaimName: windowshd
  8. 가상 머신의 구성을 지정하는 다음 콘텐츠로 VirtualMachineType 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  9. 다음 콘텐츠로 VirtualMachine 리소스를 만들어 클러스터에서 가상 머신을 인스턴스화하고 시작한 후 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: win-vm
      name: win-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Windows
      compute:
        virtualMachineTypeName: my-vmt
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - virtualMachineDiskName: windows-main-disk
          boot: true
        - virtualMachineDiskName: windows-iso-disk
        - virtualMachineDiskName: win-virtio-driver

    osType 필드는 로컬 컨트롤 플레인 클러스터에만 적용됩니다. 다음 기능을 구성하려면 로컬 컨트롤 플레인 클러스터에서 필요합니다.

  10. 가상 머신에 Windows를 설치합니다.

    1. importer 포드가 Windows 설치 디스크 이미지를 다운로드할 때까지 기다립니다.
    2. 가상 머신의 상태를 확인합니다.

      kubectl get gvm VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 win-vm)으로 바꿉니다.

    3. Windows VM에 연결 및 OS 설치 완료의 단계에 따라 Windows 설치를 완료합니다.

  11. 삭제:

    1. 가상 머신을 중지합니다.

      kubectl virt stop VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 win-vm)으로 바꿉니다.

    2. ISO 이미지 및 드라이버 디스크 분리의 단계를 완료합니다.

Symcloud Storage를 사용하여 Distributed Cloud에 가상 머신 프로비저닝

이 섹션에서는 Symcloud 스토리지 추상화 레이어를 사용하여 분산 클라우드 클러스터에 Linux 가상 머신과 Windows 가상 머신을 프로비저닝하는 방법을 보여주는 구성 예를 제공합니다.

이 섹션의 단계를 완료하기 전에 먼저 Symcloud Storage용 Distributed Cloud 구성의 단계를 완료해야 합니다. 나중에 클러스터에서 Symcloud Storage를 사용 중지하면 Symcloud Storage를 사용하도록 구성된 가상 머신이 실패합니다.

Symcloud Storage를 사용하여 Distributed Cloud에 Linux 가상 머신 프로비저닝

다음 예에서는 Ubuntu Server 22.04를 실행하는 Symcloud Storage로 Linux 가상 머신을 프로비저닝하는 방법을 보여줍니다. 설치 소스는 Ubuntu Server 22.04 ISO 디스크 이미지입니다.

  1. Ubuntu Server 설치 디스크 이미지에 대해 다음 콘텐츠로 VirtualMachineDisk 리소스를 만든 후 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: ubuntu-iso-disk
    spec:
      size: 20Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://releases.ubuntu.com/jammy/ubuntu-22.04.3-live-server-amd64.iso
  2. 가상 머신의 가상 하드 디스크에 대해 다음 콘텐츠로 VirtualMachineDisk 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: "ubuntu-main-disk"
    spec:
      size: 200Gi
      storageClassName: robin
  3. 가상 머신의 구성을 지정하는 다음 콘텐츠로 VirtualMachineType 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  4. 다음 콘텐츠를 사용하여 VirtualMachine 리소스를 만들어 클러스터에서 가상 머신을 인스턴스화하고 시작한 다음 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: ubu-vm
      name: ubu-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Linux
      compute:
        virtualMachineTypeName: small-2-20
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - virtualMachineDiskName: ubuntu-main-disk
          boot: true
        - virtualMachineDiskName: ubuntu-iso-disk

    osType 필드는 로컬 컨트롤 플레인 클러스터에만 적용됩니다. 다음 기능을 구성하려면 로컬 컨트롤 플레인 클러스터에서 필요합니다.

  5. 가상 머신에 Ubuntu Server를 설치합니다.

    1. importer 포드가 Ubuntu Server 설치 디스크 이미지를 다운로드할 때까지 기다립니다.
    2. 가상 머신의 상태를 확인합니다.

      kubectl get gvm VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 ubu-vm)으로 바꿉니다.

    3. 가상 머신에 로그온합니다.

      kubectl virt vnc VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 ubu-vm)으로 바꿉니다.

    4. Ubuntu Linux 설치 단계를 완료합니다.

  6. 삭제:

    1. 가상 머신을 중지합니다.

      kubectl virt stop VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 ubu-vm)으로 바꿉니다.

    2. 가상 머신의 YAML 파일을 수정하여 설치 디스크 이미지에 대한 참조를 삭제합니다.

      kubectl edit gvm VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 ubu-vm)으로 바꿉니다.

    3. 가상 머신을 시작합니다.

      kubectl virt start VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 ubu-vm)으로 바꿉니다.

    4. 설치 디스크 이미지의 VirtualMachineDisk 리소스를 삭제합니다.

      kubectl delete virtualmachinedisk ubuntu-iso-disk

Symcloud Storage를 사용하여 분산 클라우드에 Windows 가상 머신 프로비저닝

다음 예에서는 Symcloud Storage로 Windows 가상 머신을 프로비저닝하는 방법을 보여줍니다. 이 단계는 Windows를 설치하는 데 필요한 virtio 드라이버 디스크 이미지를 추가하는 것을 제외하고 Linux 가상 머신을 프로비저닝하는 것과 유사합니다.

  1. 라이선스가 부여된 Windows 사본과 설치 미디어 이미지를 획득합니다.

  2. Windows 설치 디스크 이미지에 대해 다음 콘텐츠로 VirtualMachineDisk 리소스를 만든 후 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-iso-disk
      namespace: default
    spec:
      size: 5Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: WINDOWS_ISO_URL

    NAT_GATEWAY을 대상 Windows 설치 ISO 디스크 이미지의 전체 URL로 바꿉니다.

  3. virtio 드라이버에 다음 콘텐츠가 포함된 VirtualMachineDisk 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-virtio-driver
      namespace: default
    spec:
      size: 1Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
  4. 가상 머신의 가상 하드 디스크에 대해 다음 콘텐츠로 VirtualMachineDisk 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-main-disk
      namespace: default
    spec:
      size: 15Gi
      storageClassName: robin
  5. 가상 머신의 구성을 지정하는 다음 콘텐츠로 VirtualMachineType 리소스를 만든 다음 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  6. 다음 콘텐츠로 VirtualMachine 리소스를 만들어 클러스터에서 가상 머신을 인스턴스화하고 시작한 후 클러스터에 적용합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: win-vm
      name: win-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Windows
      compute:
        virtualMachineTypeName: my-vmt
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - virtualMachineDiskName: windows-main-disk
          boot: true
        - virtualMachineDiskName: windows-iso-disk
        - virtualMachineDiskName: win-virtio-driver

    osType 필드는 로컬 컨트롤 플레인 클러스터에만 적용됩니다. 다음 기능을 구성하려면 로컬 컨트롤 플레인 클러스터에서 필요합니다.

  7. 가상 머신에 Windows를 설치합니다.

    1. importer 포드가 Windows 설치 디스크 이미지를 다운로드할 때까지 기다립니다.
    2. 가상 머신의 상태를 확인합니다.

      kubectl get gvm VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 win-vm)으로 바꿉니다.

    3. Windows VM에 연결 및 OS 설치 완료의 단계에 따라 Windows 설치를 완료합니다.

  8. 삭제:

    1. 가상 머신을 중지합니다.

      kubectl virt stop VM_NAME

      VM_NAME을 가상 머신 이름(이 예에서는 win-vm)으로 바꿉니다.

    2. ISO 이미지 및 드라이버 디스크 분리의 단계를 완료합니다.

virtctl를 사용하여 Distributed Cloud에 가상 머신 프로비저닝

가상 머신에 자체 리소스 사양을 작성하여 제공되는 맞춤설정이 필요하지 않은 경우 VM 만들기에 설명된 대로 virtctl 명령줄 도구를 사용하여 Distributed Cloud에 가상 머신을 프로비저닝할 수 있습니다.

Distributed Cloud에서 실행되는 가상 머신 관리

Distributed Cloud에서 실행되는 가상 머신 관리에 관한 안내는 다음 GDC용 VM 런타임 문서를 참고하세요.

로컬 제어 영역 클러스터에서 실행되는 가상 머신을 관리하려면 먼저 kubectl 연결을 구성해야 합니다.

Linux 가상 머신에 대한 직렬 콘솔 액세스를 위해 ttyS0 기기 구성

직렬 콘솔(kubectl virt console)을 사용하여 Linux 가상 머신에 액세스하려면 게스트 운영체제에서 ttyS0 직렬 콘솔 기기가 구성되어 있는지 확인하세요. 이 기기를 구성하려면 다음 단계를 완료하세요.

  1. 시스템에서 ttyS0 직렬 기기를 인스턴스화합니다.

    setserial -g /dev/ttyS0
  2. /etc/default/grub 구성 파일에 다음 줄을 추가하여 ttyS0 직렬 기기를 사용하도록 grub 부트로더를 구성합니다. 첫 번째 줄은 기존 GRUB_CMDLINE_LINUX 변수를 대체합니다.

    GRUB_CMDLINE_LINUX='console=tty0 console=ttyS0,19200n8'
    GRUB_TERMINAL=serial
    GRUB_SERIAL_COMMAND="serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1"
  3. grub 구성을 부트 섹터에 적용합니다.

    update-grub
  4. 가상 머신을 다시 시작합니다.

Distributed Cloud의 GDC에서 VM 런타임 사용 중지

이 섹션의 단계에 따라 Distributed Cloud의 GDC에서 VM 런타임을 사용 중지합니다. Distributed Cloud에서 GDC의 VM 런타임을 사용 중지하려면 VM 삭제에 설명된 대로 Distributed Cloud 클러스터의 모든 가상 머신을 중지하고 삭제해야 합니다.

Distributed Cloud의 GDC에서 VM 런타임을 사용 중지하려면 enabled 사양 매개변수를 다음과 같이 false로 설정하여 VMRuntime 커스텀 리소스를 수정한 후 클러스터에 적용하세요.

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  # Disable Anthos VM Runtime
  enabled: false
  # vmImageFormat defaults to "raw" if not set
  vmImageFormat: "raw"

다음 단계