Google Distributed Cloud의 VM 런타임에서 VM 구성 수정

이 문서는 Google Distributed Cloud의 VM 런타임을 사용하여 베어메탈용 GKE에서 가상 머신(VM)을 실행하는 애플리케이션 소유자를 대상으로 작성되었습니다. 이 문서에서는 GKE 클러스터에서 실행 중인 VM을 수정하는 방법을 설명합니다. 예를 들어 CPU 및 메모리와 같은 리소스 할당을 수정하거나 VM이 연결되는 네트워크를 변경할 수 있습니다.

VirtualMachine 리소스의 spec 섹션에서 모든 필드를 수정할 수 있습니다. VM의 라벨을 수정할 수도 있습니다. VM 이름(metadata.name)과 같은 다른 필드는 수정할 수 없습니다. 기본적으로 리소스를 수정하려면 먼저 VM이 Stopped 상태여야 합니다. 하지만 베어메탈용 GKE 버전 1.13.0부터는 구성을 변경할 때마다 VirtualMachine 리소스가 자동으로 다시 시작되도록 구성할 수 있습니다.

VirtualMachine 리소스 수정을 저장할 때 오류가 포함된 경우 변경사항이 거부되고 알림이 표시됩니다. 오류를 수정하고 VirtualMachine 리소스를 다시 저장합니다. 변경 후 VM이 시작되지 않으면 kubectl describe gvm VM_NAME 명령어를 사용하여 문제 해결 정보를 확인하고 오류를 수정합니다.

시작하기 전에

이 문서를 완료하려면 다음 리소스에 대해 액세스 권한이 필요합니다.

컴퓨팅 리소스 수정

컴퓨팅 워크로드를 요구사항이 변경되면 VM에 할당하는 가상 CPU 수와 가상 메모리 양을 업데이트할 수 있습니다. 컴퓨팅 워크로드를 수정하려면 다음 단계를 완료합니다.

  1. 수정하려는 VM을 중지합니다.

    kubectl virt stop VM_NAME
    

    VM_NAME을 중지하려는 VM의 이름으로 바꿉니다.

  2. kubectl을 사용하여 VM을 수정합니다.

    kubectl edit gvm VM_NAME
    

    VM_NAME을 수정하려는 VM의 이름으로 바꿉니다.

  3. 편집기에서 변경하려는 컴퓨팅 리소스 값을 업데이트합니다.

    예를 들어 다음 샘플 VirtualMachine 매니페스트는 VM 리소스에 할당된 vCPU가 2개임을 보여줍니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      compute:
        cpu:
          vcpus: 2
    ...
    

    할당된 vCPU 수를 업데이트하려면 다음 예시와 같이 편집기에서 값을 변경합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      compute:
        cpu:
          vcpus: 4
    ...
    
  4. VM 매니페스트를 저장하고 닫습니다.

  5. 수정한 VM을 시작합니다.

    kubectl virt start VM_NAME
    

    VM_NAME을 수정한 VM의 이름으로 바꿉니다.

  6. VM의 STATUS를 확인합니다.

    kubectl get gvm VM_NAME
    

    VM이 Running 상태인지 확인합니다. VM이 호스트가 제공할 수 있는 것보다 많은 컴퓨팅 리소스를 요청하는 경우 VM을 시작할 수 없습니다. VM이 Running 상태가 아니면 VirtualMachine 리소스 매니페스트와 호스트의 컴퓨팅 리소스 가용성을 확인합니다.

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

    NAME   STATUS    AGE   IP
    vm1    Running   1m    192.168.2.72
    
  7. kubectl describe gvm을 사용하여 VM에 대한 자세한 정보를 봅니다.

    kubectl describe gvm VM_NAME
    

    VM_NAME을 수정한 VM의 이름으로 바꿉니다.

    다음 출력 예시는 성공적으로 적용된 vCPU 수의 변경을 포함하여 VM에 대한 요약 정보를 보여줍니다.

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Compute:
        Cpu:
          Vcpus:  4
    ...
    

자세한 내용은 특정 vCPU 및 메모리 컴퓨팅 구성으로 VM을 만드는 방법을 참조하세요.

디스크 리소스 수정

스토리지 요구사항이 변경되면 VM에 가상 디스크를 추가하거나 삭제할 수 있습니다. VM에 연결된 디스크를 수정하려면 다음 단계를 완료합니다.

  1. 수정하려는 VM을 중지합니다.

    kubectl virt stop VM_NAME
    

    VM_NAME을 중지하려는 VM의 이름으로 바꿉니다.

  2. kubectl을 사용하여 VM을 수정합니다.

    kubectl edit gvm VM_NAME
    

    VM_NAME을 수정하려는 VM의 이름으로 바꿉니다.

  3. 편집기에서 spec.disks 섹션을 업데이트하여 디스크를 연결하거나 분리합니다.

    예를 들어 다음 샘플 VirtualMachine 매니페스트는 부팅 디스크만 VM에 연결되어 있음을 보여줍니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      disks:
        - boot: true
          virtualMachineDiskName: vm1-boot-dv
      ...
    

    기존의 빈 디스크를 추가하려면 다음 예시와 같이 편집기에서 디스크 구성을 업데이트합니다.

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

    DISK_NAME을 연결할 디스크의 이름으로 바꿉니다.

  4. VM 매니페스트를 저장하고 닫습니다.

  5. 수정한 VM을 시작합니다.

    kubectl virt start VM_NAME
    

    VM_NAME을 수정한 VM의 이름으로 바꿉니다.

  6. VM의 STATUS를 확인합니다.

    kubectl get gvm VM_NAME
    

    VM이 Running 상태인지 확인합니다. VM이 호스트가 제공할 수 없는 StorageClass 또는 디스크 할당을 요청하면 VM을 시작할 수 없습니다. VM이 Running 상태가 아니면 VirtualMachineVirtualMachineDisk 리소스 매니페스트와 호스트 스토리지 지원을 확인합니다.

  7. kubectl describe gvm을 사용하여 VM에 대한 자세한 정보를 봅니다.

    kubectl describe gvm VM_NAME
    

    VM_NAME을 수정한 VM의 이름으로 바꿉니다.

    다음 출력 예시는 연결된 디스크의 변경사항이 성공적으로 적용된 VM에 대한 요약 정보를 보여줍니다.

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Disks:
        Name:  vm1-boot-dv
        Name:  data-disk-01
    ...
    

자세한 내용은 디스크 만들기 및 관리 방법을 참조하세요.

네트워크 리소스 수정

인프라가 변경되면 VM의 네트워크 구성을 변경해야 할 수 있습니다. 예를 들어 VM을 다른 가상 네트워크에 연결하거나 IP 주소를 수동으로 할당할 수 있습니다. VM의 네트워크 구성을 수정하려면 다음 단계를 완료합니다.

  1. 수정하려는 VM을 중지합니다.

    kubectl virt stop VM_NAME
    

    VM_NAME을 중지하려는 VM의 이름으로 바꿉니다.

  2. kubectl을 사용하여 VM을 수정합니다.

    kubectl edit gvm VM_NAME
    

    VM_NAME을 수정하려는 VM의 이름으로 바꿉니다.

  3. 편집기에서 변경하려는 네트워크 구성 설정을 업데이트합니다.

    예를 들어 다음 샘플 VirtualMachine 매니페스트는 VM이 backend-vlan100이라는 네트워크에 연결하고 IP 주소가 정의되어 있지 않으므로 DHCP를 사용하는 것을 보여줍니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      interfaces:
        - name: eth0
          networkName: backend-vlan100
          default: true
    ...
    

    VM이 연결되는 네트워크를 변경하거나 수동 IP 주소를 할당하려면 다음 예시와 같이 편집기에서 네트워크 구성을 업데이트합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      interfaces:
        - name: eth0
          networkName: NETWORK_NAME
            ipAddresses:
              - IP_ADDRESS
          default: true
    ...
    

    NETWORK_NAME을 연결할 네트워크의 이름으로 바꾸거나 ipAddresses 섹션을 추가하고 VM에서 사용할 IP_ADDRESS를 지정합니다.

  4. VM 매니페스트를 저장하고 닫습니다.

  5. 수정한 VM을 시작합니다.

    kubectl virt start VM_NAME
    

    VM_NAME을 수정한 VM의 이름으로 바꿉니다.

  6. VM의 STATUS를 확인합니다.

    kubectl get gvm VM_NAME
    

    VM이 Running 상태인지 확인합니다. VM이 호스트가 제공할 수 없는 네트워크 연결을 요청하면 VM은 시작할 수 없습니다. VM이 Running 상태가 아니면 VirtualMachine 리소스 매니페스트와 호스트 네트워크 지원을 확인합니다.

  7. kubectl describe gvm을 사용하여 VM에 대한 자세한 정보를 봅니다.

    kubectl describe gvm VM_NAME
    

    VM_NAME을 수정한 VM의 이름으로 바꿉니다.

    다음 예시 출력은 네트워크 및 IP 주소 구성 변경사항이 성공적으로 적용된 VM에 대한 요약 정보를 보여줍니다.

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Compute:
      Interfaces:
        Name:          eth0
        Network Name:  backend-vlan200
    ...
    Status:
      ...
      Interfaces:
        Dns Config:
          Nameservers:
            8.8.8.8
        gateway4:  10.200.0.9
        Ip Addresses:
          10.200.0.22/24
        Mac Address:    22:b4:e3:d2:ef:fb
        Name:           eth0
        Resource Name:  vm1-eth0-f2468
    ...
    

자세한 내용은 가상 네트워크 만들기 및 관리 방법을 참조하세요.

자동 다시 시작을 위한 VM 구성

compute 설정 변경사항과 같은 많은 VM 구성 변경사항을 적용하려면 해당 VM 인스턴스(VirtualMachineInstance)와 변경사항이 동기화되도록 VM을 중지했다가 다시 시작해야 합니다. 베어메탈용 GKE 버전 1.13.0 이상에서 실행되는 VM은 해당 구성을 변경할 때마다 자동으로 다시 시작되도록 구성할 수 있습니다. 이 기능을 사용하도록 VM을 구성할 때 커스텀 리소스를 수정하는 경우 VM을 중지했다가 다시 시작할 필요는 없습니다. Google Distributed Cloud용 VM 런타임은 VM을 모니터링하고, 구성 변경사항이 감지되면 VM을 자동으로 다시 시작하여 변경사항을 동기화합니다.

Config Management를 사용하여 YAML 구성 파일을 관리하는 경우 이 기능이 특히 유용합니다. 이 기능이 없으면 VirtualMachine 커스텀 리소스를 변경하기 전에 VM을 수동으로 중지해야 하며, 변경을 완료한 후 VM을 수동으로 시작해야 합니다.

자동 다시 시작을 사용 설정하려면 다음 안내를 따르세요.

  1. kubectl을 사용하여 VM을 수정합니다.

    kubectl edit gvm VM_NAME
    
  2. 편집기에서 autoRestartOnConfigurationChange 필드를 추가하고 true로 설정합니다.

    vcpus 값 업데이트와 같이 VM을 추가로 변경할 수 있습니다. compute 설정을 수정하면 변경사항을 저장할 때 Google Distributed Cloud용 VM 런타임이 VM을 자동으로 다시 시작합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      ...
      name: vm-sample-01
      namespace: default
      resourceVersion: "16711824"
      uid: ed623879-0cfa-52de-ad2c-b63308e6116c
    spec:
      autoRestartOnConfigurationChange: true
      compute:
        cpu:
          vcpus: 2
          ...
    
  3. VM 매니페스트를 저장하고 닫습니다.

    해당 VM 인스턴스와 동기화해야 하는 VM에 다른 변경 사항이 있는 경우 Google Distributed Cloud용 VM 런타임이 VM을 다시 시작합니다. 자동 재시작을 사용 설정하도록 변경한 경우 VM을 다시 시작할 필요가 없습니다.

  4. VM의 status를 확인합니다.

    kubectl get gvm VM_NAME
    

    VM을 얼마나 빨리 가져오는지에 따라 VM이 다시 시작될 때 state: Starting이 표시될 수 있습니다. VM이 다시 시작되면 state: Running이 표시됩니다. 이후 VirtualMachine 커스텀 리소스 구성을 변경할 때는 VM을 수동으로 중지하고 시작할 필요가 없습니다. 후속 커스텀 리소스 변경사항은 VM 인스턴스에 일관되게 반영됩니다.

다음과 같은 상황의 특성에 유의하세요.

  • VirtualMachine 커스텀 리소스를 수정하기 전에 VM을 수동으로 중지하면 구성 변경사항이 다시 시작을 트리거하지 않습니다. 구성 변경사항이 유지되기 전에 VM의 중지된 상태입니다.

  • 자동 다시 시작 기능을 사용 설정하기 전에 VM에 대한 라벨 또는 일정을 변경한 경우 다른 변경사항 없이 autoRestartOnConfigurationChange를 추가해도 다시 시작이 트리거되지 않습니다. 이상적으로 이 기능은 VM 인스턴스와 VM 구성의 일관성을 유지하도록 합니다. 그러나 Google Distributed Cloud용 VM 런타임은 이전의 불일치를 감지할 수 없습니다.

다음 단계