Google Distributed Cloud의 VM 런타임 사용 설정 또는 사용 중지

이 문서에서는 VMRuntime 커스텀 리소스를 업데이트하거나 bmctl 명령어를 실행하여 Google Distributed Cloud의 VM 런타임을 사용 설정 또는 사용 중지하는 방법을 설명합니다.

시작하기 전에

Google Distributed Cloud의 VM 런타임을 사용 설정 또는 사용 중지하려면 다음 리소스 및 도구에 액세스할 수 있어야 합니다.

Google Distributed Cloud의 VM 런타임 사용 설정

Google Distributed Cloud의 VM 런타임은 베어메탈용 GKE 버전 1.10 이상에서 자동으로 설치되지만 기본적으로 사용 중지된 상태입니다. 베어메탈용 GKE에서 VM 리소스를 실행하려면 먼저 Google Distributed Cloud의 VM 런타임을 사용 설정해야 합니다.

bmctl

  • 런타임을 사용 설정하려면 bmctl 도구를 사용합니다.

    bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
    

    클러스터의 kubeconfig 파일 경로를 제공합니다. 클러스터를 만들면 베어메탈용 GKE가 관리자 워크스테이션에 kubeconfig 파일을 생성합니다. 기본적으로 경로는 bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig입니다.

    Google Distributed Cloud의 VM 런타임이 이미 사용 설정되어 있으면 명령어가 오류를 반환합니다.

에뮬레이션 또는 이미지 형식과 같은 추가 설정은 VMRuntime 커스텀 리소스를 수정하여 구성할 수 있습니다.

커스텀 리소스

런타임을 사용 설정하려면 VMRuntime 커스텀 리소스를 업데이트합니다. 이 커스텀 리소스는 기본적으로 설치되어 있습니다.

  1. VMRuntime 커스텀 리소스를 수정합니다.

    kubectl edit vmruntime
    
  2. 사양에서 enabled:true를 설정합니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      # useEmulation defaults to "false" if not set.
      useEmulation: true
      # vmImageFormat defaults to "qcow2" if not set.
      vmImageFormat: qcow2
    

    앞의 spec 섹션에서 다음 값을 설정할 수 있습니다.

    • enabled: Google Distributed Cloud의 VM 런타임을 사용 설정하려면 true로 설정합니다.
    • useEmulation: 노드가 하드웨어 가상화를 지원하지 않거나 확실하지 않으면 값을 true로 설정합니다. 사용 가능한 경우 하드웨어 가상화에서 소프트웨어 에뮬레이션보다 우수한 성능을 제공합니다. useEmulation 필드가 지정되지 않으면 기본값은 false입니다.
    • vmImageFormat: 두 가지 디스크 이미지 형식 값인 rawqcow2를 지원합니다. vmImageFormat을 설정하지 않으면 Google Distributed Cloud의 VM 런타임에서 raw 디스크 이미지 형식을 사용하여 VM을 만듭니다. raw 형식은 쓰기 형식의 사본인 qcow2보다 우수한 성능을 제공할 수 있지만 더 많은 디스크를 사용할 수 있습니다. VM의 이미지 형식에 대한 자세한 내용은 QEMU 문서의 디스크 이미지 파일 형식을 참조하세요.
  3. 편집기에서 커스텀 리소스를 저장합니다.

  4. VMRuntime 커스텀 리소스가 사용 설정되었는지 확인합니다.

    kubectl describe vmruntime vmruntime
    

    VMRuntime 커스텀 리소스의 세부정보에는 Status 섹션이 포함됩니다. VMRuntime.Status.Readytrue로 표시되면 Google Distributed Cloud의 VM 런타임이 사용 설정되었고 작동 중입니다.

Google Distributed Cloud의 VM 런타임 사용 중지

Google Distributed Cloud의 VM 런타임을 더 이상 사용할 필요가 없으면 이 기능을 사용 중지하면 됩니다.

bmctl

  • 런타임을 사용 중지하려면 bmctl 도구를 사용합니다.

    bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \
      --force=true
    

    클러스터에 대한 kubeconfig 파일 경로와 다음 구성 옵션에 대한 값을 제공합니다.

    • --force: 기존 VM 리소스 삭제를 확인하려면 true로 설정합니다. 기본값은 false입니다.

커스텀 리소스

런타임을 사용 중지하려면 VMRuntime 커스텀 리소스를 업데이트합니다.

  1. VMRuntime 커스텀 리소스를 수정합니다.

    kubectl edit vmruntime
    
  2. 사양에서 enabled:false를 설정합니다.

    apiVersion: vm.cluster.gke.io/v1`
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: false
      useEmulation: true
      vmImageFormat: qcow2
    
  3. 편집기에서 업데이트된 커스텀 리소스 사양을 저장합니다.

  4. VMRuntime 커스텀 리소스가 사용 중지되었는지 확인하려면 vm-system 네임스페이스에서 실행되는 포드를 확인합니다.

    kubectl get pods --namespace vm-system
    

    Google Distributed Cloud의 VM 런타임은 vmruntime-controller-manager 배포에 속하는 포드가 네임스페이스에서 실행되는 경우에만 사용 중지됩니다.

VM 실행 동작 이해

Google Distributed Cloud 리소스의 VM 런타임에서 baremetal.cluster.gke.io/vmrumtime-force-disable 주석을 사용하여 VM이 클러스터에서 실행되는 동안 런타임이 사용 중지되었을 때의 동작을 정의할 수 있습니다.

다음 예시는 이 주석의 값이 기본적으로 false로 설정된 것을 보여줍니다.

  // VM runtime yaml file
  apiVersion: vm.cluster.gke.io/v1
  kind: VMRuntime
  metadata:
    annotations:
      baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
    name: vmruntime
  [...]

이 주석이 false로 설정되면 Google Distributed Cloud의 VM 런타임이 실행 중인 VM을 보호하려고 시도합니다. Google Distributed Cloud의 VM 런타임이 사용 중지되기 전에 실행 중인 모든 VM을 삭제하거나 이전 섹션에서 설명한 것처럼 bmctl disable vmruntime 명령어로 --force=true 매개변수를 지정합니다.

다음 표에서는 주석이 true 또는 false로 설정되었을 때 그리고 --force=true 매개변수를 지정하는지 여부에 따라 실행 중인 VM에 발생하는 결과를 설명합니다.

클러스터 상태 --force 매개변수 vmrumtime-force-disable 주석 동작
VM 없음 해당 사항 없음 해당 사항 없음 Google Distributed Cloud의 VM 런타임을 사용 중지합니다.
기존 VM True True 실행 중인 모든 VM 및 관련 리소스를 삭제합니다. Google Distributed Cloud의 VM 런타임을 사용 중지합니다.
False 실행 중인 모든 VM 및 관련 리소스를 삭제합니다. Google Distributed Cloud의 VM 런타임을 사용 중지합니다.
거짓 True 실행 중인 VM 및 관련 리소스를 삭제하라는 메시지가 표시됩니다. 실행 중인 모든 VM이 삭제되었으면 Google Distributed Cloud의 VM 런타임을 중지합니다.
거짓 False 실행 중인 기존 VM을 삭제하지 않습니다. Google Distributed Cloud의 VM 런타임을 사용 중지하지 않습니다. bmctl 명령어가 오류를 반환합니다.

Google Distributed Cloud의 VM 런타임 프리플라이트 검사

Google Distributed Cloud의 VM 및 VM을 사용하기 전에 Google Distributed Cloud의 VM 런타임 프리플라이트 검사를 통해 머신 환경의 기본 요건 집합을 검사합니다. Google Distributed Cloud의 VM 런타임 프리플라이트 검사가 실패하면 VM 생성이 차단됩니다. spec.enabled가 true로 설정되면 Google Distributed Cloud의 VM 런타임 프리플라이트 검사가 자동으로 실행됩니다.

kubectl label nodes NODE_NAME   "kubevm.io/VM-SkipSchedule"= --kubeconfig KUBECONFIG_PATH

다음 작업 중 하나를 수행하면 Google Distributed Cloud의 VM 런타임 프리플라이트 검사가 실행됩니다.

  1. Google Distributed Cloud의 VM 런타임 사용 설정
  2. useEmulation과 같은 Google Distributed Cloud의 VM 런타임 기능 사용 설정
  3. 클러스터 업그레이드
  4. 노드에서 kubevm.io/VM-SkipSchedule 라벨 삭제
  5. bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH 명령어를 실행하거나 VMRuntimePreflightCheck YAML 매니페스트를 적용하여 Google Distributed Cloud의 VM 런타임 프리플라이트 검사 객체를 독립적으로 만듭니다.

최신 Google Distributed Cloud의 VM 런타임 프리플라이트 검사가 성공하면 VM을 실행할 수 있습니다. 실행 전 검사가 실패하면 VM 만들기가 차단되고 실행 전 검사 오류가 발생합니다.

실행 전 검사 성공 확인

실행 전 검사가 성공했는지 확인하려면 다음 명령어를 실행합니다.

  1. 마지막으로 수행된 실행 전 검사를 찾습니다.

    kubectl get vmruntimepfc -n vm-system --kubeconfig KUBECONFIG_PATH
    

    출력은 다음 샘플과 같이 표시됩니다.

    NAME                                                             PASS    AGE
    vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e   false   42s
    vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5   true    21s
    
  2. 실행 전 검사의 상태를 찾으려면 다음 명령어를 실행합니다.

       kubectl get vmruntime vmruntime -o yaml --kubeconfig KUBECONFIG_PATH
    
       ...
         preflightCheckSummary:
         preflightCheckSummary:
           featureStatuses:
             CPU:
               passed: true
             KVM:
               passed: true
           preflightCheckName: vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5
           preflightCheckPassed: true
       ...
    
     ```
    

실행 전 검사 실패 디버그

실행 전 검사가 실패하면 다음 디버그 단계를 수행합니다.

  1. 마지막으로 수행된 실행 전 검사를 찾습니다.

    kubectl get vmruntimepfc -n vm-system
    
  2. 자세한 내용은 실행 전 검사 상태를 확인합니다.

    kubectl get vmruntimepfc -n vm-system \
        vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e -o yaml \
        --kubeconfig KUBECONFIG_PATH
    
      ...
      status:
      checks:
       worker-0--52229ee15841099-22c41577139a7b8c.lab.anthos:
         passed: false
         results:
         - checkName: CPU
           passed: true
         - checkName: KVM
           message: |
             command terminated with exit code 1
             ls: /mnt/dev/kvm: No such file or directory
           passed: false
      ...
    
  3. 문제를 수정하고 Google Distributed Cloud의 VM 런타임 프리플라이트 검사를 다시 실행합니다. 다음은 VMRuntimePreflightCheck YAML 매니페스트 예시를 보여줍니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntimePreflightCheck
    metadata:
      name: vmruntime-preflight-check-manual
      namespace: vm-system
    

다음 단계