튜토리얼: GDC용 VM 런타임에서 Linux VM 만들기 및 관리


이 튜토리얼에서는 GDC용 VM 런타임을 새로 설치할 때 Linux 가상 머신(VM)을 만들고 관리하는 방법을 설명합니다. StorageClass 및 가상 네트워크와 같은 기본 종속 항목을 만들고 정의한 후 이러한 리소스를 사용하는 VM을 만드는 프로세스를 알아봅니다. 그런 다음 새 디스크 추가와 같은 VM을 수정하는 방법을 알아봅니다.

목표

  • 기본 종속 항목 구성
    • GDC용 VM 런타임에 StorageClass 만들기
    • VM에 사용할 가상 네트워크 만들기
  • 가상 머신 부팅 디스크 만들기
  • VM 만들기
  • VM을 수정하여 새 가상 디스크 추가

시작하기 전에

이 튜토리얼을 완료하려면 다음 리소스 및 도구에 액세스할 수 있어야 합니다.

StorageClass 만들기

StorageClass을 사용하여 VM에 사용할 수 있는 스토리지 유형을 정의합니다. 다양한 스토리지 클래스가 여러 유형의 스토리지 하드웨어, 파일 시스템 또는 성능에 매핑될 수 있습니다.

StorageClass 및 스토리지 파트너에 대한 구체적인 안내는 이 튜토리얼에서 다루지 않습니다.

Anthos Ready 스토리지 파트너가 스토리지에 필요한 커스텀 리소스를 설치하고 구성하는 검증된 컨테이너 스토리지 인터페이스(CSI) 드라이버를 제공합니다. 클러스터에 CSI 드라이버를 설치하려면 지원되는 스토리지 파트너 목록을 검토하고 해당하는 안내를 따르세요.

스토리지 플랫폼에 CSI 드라이버를 설치하면 클러스터에서 하나 이상의 스토리지 클래스를 사용할 수 있습니다. 이 튜토리얼에서는 이러한 스토리지 클래스 중 하나를 사용하여 가상 하드 디스크를 만듭니다.

다음 기본 예시 NFS StorageClassNFS CSI 드라이버를 사용합니다. StorageClass에서 사용할 NFS 서버 주소와 경로를 정의합니다. 그러면 클러스터의 모든 노드가 이 NFS 스토리지에 연결하여 사용할 수 있습니다.

  apiVersion: storage.k8s.io/v1
  kind: StorageClass
  metadata:
    name: example-nfs
  provisioner: nfs.csi.k8s.io
  parameters:
    server: nfs-server.example.com
    path: /vm-share
  reclaimPolicy: Delete
  volumeBindingMode: Immediate
  mountOptions:
    - nconnect=8
    - nfsvers=4.1

이 튜토리얼에서는 자체 클러스터의 StorageClass 이름을 사용합니다.

GDC용 VM 런타임은 클러스터의 각 StorageClass에 대해 하나의 스토리지 프로필을 자동으로 생성합니다. 스토리지 프로필은 연결된 StorageClass와 이름이 동일합니다. 스토리지 프로필은 각 StorageClass와 연결된 추가 구성 옵션을 제공합니다. 구성 안내를 포함한 스토리지 프로필에 대한 자세한 내용은 스토리지 프로필 구성을 참조하세요.

가상 네트워크 만들기

VM은 가상 네트워크 인터페이스를 사용하여 가상 네트워크에 연결합니다. 가상 네트워크를 사용하면 클러스터의 다른 VM이나 클러스터 외부의 리소스와 통신할 수 있습니다.

이 튜토리얼에서는 외부 DHCP 서버를 사용할 수 있는 기본 Layer 2(L2) 가상 네트워크를 만듭니다. 외부 DHCP 서버를 사용 설정할 때 DHCP가 DNS 및 게이트웨이 설정을 제공하는 경우 해당 구성을 건너뛸 수 있습니다.

외부 DHCP 서버를 사용하는 네트워크를 만들려면 다음 단계를 완료합니다.

  1. 원하는 편집기에서 dhcp-network.yaml과 같은 Network 매니페스트를 만듭니다.

    nano dhcp-network.yaml
    
  2. 다음 YAML 매니페스트를 복사하여 붙여넣습니다.

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      externalDHCP4: true
    

    다음 값을 바꿉니다.

    • NETWORK_NAME: 네트워크 이름입니다.
    • INTERFACE_NAME: 네트워크를 연결할 베어메탈용 GKE 노드의 인터페이스 이름입니다. 모든 노드의 인터페이스 이름이 동일해야 합니다.

    Network 매니페스트에서는 다음 값이 설정됩니다.

    • 워크로드에서 이 네트워크에 대한 L2 연결만 가능합니다. GDC용 VM 런타임에서 만들 수 있는 유일한 네트워크 type입니다.
    • 네트워크에 외부 DHCP가 사용 설정되어 있습니다. 외부 DHCP 서버는 이 네트워크에 연결된 워크로드의 IPv4 주소 할당, 경로, 게이트웨이, DNS 구성을 담당합니다.
  3. 편집기에서 Network 매니페스트를 저장하고 닫습니다.

  4. kubectl을 사용하여 네트워크를 만듭니다.

    kubectl apply -f use-dhcp-network.yaml
    

VM 부팅 디스크 만들기

VM은 사전 생성된 디스크 이미지를 사용하거나 ISO 이미지를 통해 부팅하여 OS를 수동으로 설치할 수 있습니다. 이러한 디스크 이미지는 HTTP를 사용하여 저장하고 액세스하거나 Cloud Storage에 저장하고 Secret을 사용하여 액세스할 수 있습니다.

이 튜토리얼에서는 HTTP를 사용하여 공개 Ubuntu Server 20.04 클라우드 이미지에서 부팅 디스크를 만듭니다.

이미지에서 디스크를 만들려면 다음 단계를 완료합니다.

  1. 원하는 편집기에서 my-disk.yaml과 같은 VirtualMachineDisk 매니페스트를 만듭니다.

    nano my-disk.yaml
    
  2. 다음 YAML 정의를 복사하여 붙여넣습니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 20Gi
      storageClassName: STORAGE_CLASS_NAME
      source:
        http:
          url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
    

    다음 값을 바꿉니다.

    • DISK_NAME: 디스크에 사용할 이름입니다. 이 예시에서는 공개 Ubuntu 서버 20.04 이미지를 사용하여 DISK_NAME이라는 20Gi(20기비바이트) 디스크를 만듭니다.
    • STORAGE_CLASS_NAME: VirtualMachineDisk에 사용할 StorageClass입니다.
      • kubectl get storageclass를 사용하여 클러스터에서 사용할 수 있는 항목을 나열합니다.
  3. 편집기에서 VirtualMachineDisk 매니페스트를 저장하고 닫습니다.

  4. kubectl을 사용하여 디스크를 만듭니다.

    kubectl apply -f my-disk.yaml
    

VM 만들기

이전 섹션에서 만든 가상 네트워크와 부팅 디스크를 사용하여 VM을 만듭니다. VM이 가상 네트워크에 연결되고 가상 디스크에서 부팅됩니다. 다음 안내에서는 kubectl CLI를 사용하여 VirtualMachine YAML 매니페스트 파일을 직접 적용하여 VM을 만듭니다.

  1. 원하는 편집기에서 my-vm.yaml과 같이 VirtualMachine을 정의하는 매니페스트를 만듭니다.

    nano my-vm.yaml
    
  2. 다음 YAML 정의를 복사하여 붙여넣습니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      osType: linux
      compute:
        cpu:
          vcpus: VCPU_NUMBER
        memory:
          capacity: MEMORY_SIZE
      interfaces:
        - name: eth0
          networkName: NETWORK_NAME
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: DISK_NAME
    

    다음 값을 바꿉니다.

    • VM_NAME: VM의 이름입니다.
    • VCPU_NUMBER: VM에 할당할 vCPU 선택적 숫자로, 이 설정이 없으면 기본적으로 vCPU 2개가 할당됩니다.
      • 1~96개 사이의 vCPU를 VM에 할당할 수 있습니다.
    • MEMORY_SIZE: VM에 할당할 선택적 메모리 양입니다. 이 설정이 없으면 기본값인 메모리 4GiB가 할당됩니다.
      • 1M~1T 사이의 메모리를 VM에 할당할 수 있습니다. 자세한 내용은 메모리 리소스 단위를 참조하세요.
    • NETWORK_NAME: 이전 섹션에서 만든 네트워크의 이름입니다.
    • DISK_NAME: 이전 섹션에서 만든 부팅 디스크의 이름입니다. 이 디스크는 boot: true로 설정됩니다.
  3. 편집기에서 매니페스트를 저장하고 닫습니다.

  4. kubectl을 사용하여 VM 및 디스크를 만듭니다.

    kubectl apply -f my-vm.yaml
    
  5. VM을 만드는 데 몇 분 정도 걸릴 수 있습니다. kubectl 명령어로 VM 상태를 확인합니다.

    kubectl get gvm VM_NAME
    

    다음 출력 예시는 Running 상태의 VM을 보여줍니다.

    NAME    STATUS    AGE   IP
    MY_VM   Running   64s   192.168.2.124
    

VM에 연결

VM이 실행 중이면 VM의 콘솔에 연결합니다. 이 콘솔 연결을 통해 VM 추가 구성이나 애플리케이션 설치와 같은 기본 태스크를 수행할 수 있습니다.

  1. Console에서 VM에 액세스하려면 kubectl을 사용합니다.

    kubectl virt ssh VM_NAME
    
  2. VM의 콘솔에 성공적으로 연결한 후 VM 세션 및 콘솔을 종료합니다.

    Ctrl + ]
    

VM 수정

VM 수명 주기 중에 VM을 편집할 수 있습니다. 예를 들어 스토리지를 추가하여 전용 디스크에 애플리케이션을 설치하거나 애플리케이션의 추가 스토리지를 사용할 수 있습니다.

이 튜토리얼에서는 빈 디스크를 만들어 VM에 연결합니다. 이 시나리오에서는 애플리케이션 데이터를 저장하기 위해 데이터 디스크를 만들 수 있습니다.

  1. 원하는 편집기에서 my-data-disk.yaml과 같은 VirtualMachineDisk 매니페스트를 만듭니다.

    nano my-data-disk.yaml
    
  2. 다음 YAML 정의를 복사하여 붙여넣습니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DATA_DISK_NAME
    spec:
      size: 10Gi
      storageClassName: STORAGE_CLASS_NAME
    

    다음 값을 바꿉니다.

    • DATA_DISK_NAME: 데이터 디스크에 원하는 이름입니다. 이 예시에서는 10Gi(10기비바이트) 디스크를 만듭니다.
    • STORAGE_CLASS_NAME: VirtualMachineDisk에 사용할 StorageClass입니다.
      • kubectl get storageclass를 사용하여 클러스터에서 사용할 수 있는 항목을 나열합니다.
  3. 편집기에서 디스크 매니페스트를 저장하고 닫습니다.

  4. kubectl을 사용하여 디스크를 만듭니다.

    kubectl apply -f my-data-disk.yaml
    
  5. 새 가상 디스크를 연결하기 전에 kubectl을 사용하여 VM을 중지합니다.

    kubectl virt stop VM_NAME
    
  6. VM 리소스를 수정합니다.

    kubectl edit gvm VM_NAME
    

    VirtualMachine YAML 매니페스트를 업데이트하여 VM의 spec.disks 섹션 끝에 디스크를 연결합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      ...
      disks:
        - boot: true
          virtualMachineDiskName: DISK_NAME
        - virtualMachineDiskName: DATA_DISK_NAME
    

    DATA_DISK_NAME을 이전 단계에서 만든 디스크의 이름으로 바꿉니다.

  7. 편집기에서 업데이트된 VM 매니페스트를 저장하고 닫습니다.

  8. kubectl을 사용하여 VM을 시작합니다.

    kubectl virt start VM_NAME
    

삭제

이 튜토리얼에서 만든 리소스를 삭제하려면 다음 단계를 완료하세요.

  1. VM을 삭제합니다.

    kubectl delete -f my-vm.yaml
    
  2. VirtualMachineDisk 리소스를 삭제합니다.

    kubectl delete -f my-data-disk.yaml
    kubectl delete -f my-disk.yaml
    

클러스터의 기본 종속 항목을 유지하지 않으려면 다음 단계를 완료하세요.

  1. 가상 네트워크를 삭제합니다.

    kubectl delete -f use-dhcp-network.yaml
    
  2. 클러스터에서 CSI 드라이버를 삭제하려면 스토리지 파트너의 안내를 따르세요.

다음 단계