이 문서에서는 VMRuntime
커스텀 리소스를 업데이트하거나 bmctl
명령어를 실행하여 Google Distributed Cloud의 VM 런타임을 사용 설정 또는 사용 중지하는 방법을 설명합니다.
시작하기 전에
Google Distributed Cloud의 VM 런타임을 사용 설정 또는 사용 중지하려면 다음 리소스 및 도구에 액세스할 수 있어야 합니다.
- 베어메탈용 GKE 버전 1.12.0(
anthosBareMetalVersion: 1.12.0
) 이상 클러스터에 대한 액세스 권한. 워크로드 실행이 가능한 모든 클러스터 유형을 사용할 수 있습니다. 필요한 경우 Compute Engine에서 베어메탈용 GKE를 사용해 보거나 클러스터 만들기 개요를 참조하세요. bmctl
명령줄 도구 자세한 내용은bmctl
도구 다운로드 및 설치를 참조하세요.
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
커스텀 리소스를 업데이트합니다. 이 커스텀 리소스는 기본적으로 설치되어 있습니다.
VMRuntime
커스텀 리소스를 수정합니다.kubectl edit vmruntime
사양에서
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
: 두 가지 디스크 이미지 형식 값인raw
및qcow2
를 지원합니다.vmImageFormat
을 설정하지 않으면 Google Distributed Cloud의 VM 런타임에서raw
디스크 이미지 형식을 사용하여 VM을 만듭니다.raw
형식은 쓰기 형식의 사본인qcow2
보다 우수한 성능을 제공할 수 있지만 더 많은 디스크를 사용할 수 있습니다. VM의 이미지 형식에 대한 자세한 내용은 QEMU 문서의 디스크 이미지 파일 형식을 참조하세요.
편집기에서 커스텀 리소스를 저장합니다.
VMRuntime
커스텀 리소스가 사용 설정되었는지 확인합니다.kubectl describe vmruntime vmruntime
VMRuntime
커스텀 리소스의 세부정보에는Status
섹션이 포함됩니다.VMRuntime.Status.Ready
가true
로 표시되면 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
커스텀 리소스를 업데이트합니다.
VMRuntime
커스텀 리소스를 수정합니다.kubectl edit vmruntime
사양에서
enabled:false
를 설정합니다.apiVersion: vm.cluster.gke.io/v1` kind: VMRuntime metadata: name: vmruntime spec: enabled: false useEmulation: true vmImageFormat: qcow2
편집기에서 업데이트된 커스텀 리소스 사양을 저장합니다.
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 런타임 프리플라이트 검사가 실행됩니다.
- Google Distributed Cloud의 VM 런타임 사용 설정
- useEmulation과 같은 Google Distributed Cloud의 VM 런타임 기능 사용 설정
- 클러스터 업그레이드
- 노드에서
kubevm.io/VM-SkipSchedule
라벨 삭제 bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH
명령어를 실행하거나VMRuntimePreflightCheck
YAML 매니페스트를 적용하여 Google Distributed Cloud의 VM 런타임 프리플라이트 검사 객체를 독립적으로 만듭니다.
최신 Google Distributed Cloud의 VM 런타임 프리플라이트 검사가 성공하면 VM을 실행할 수 있습니다. 실행 전 검사가 실패하면 VM 만들기가 차단되고 실행 전 검사 오류가 발생합니다.
실행 전 검사 성공 확인
실행 전 검사가 성공했는지 확인하려면 다음 명령어를 실행합니다.
마지막으로 수행된 실행 전 검사를 찾습니다.
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
실행 전 검사의 상태를 찾으려면 다음 명령어를 실행합니다.
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 ... ```
실행 전 검사 실패 디버그
실행 전 검사가 실패하면 다음 디버그 단계를 수행합니다.
마지막으로 수행된 실행 전 검사를 찾습니다.
kubectl get vmruntimepfc -n vm-system
자세한 내용은 실행 전 검사 상태를 확인합니다.
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 ...
문제를 수정하고 Google Distributed Cloud의 VM 런타임 프리플라이트 검사를 다시 실행합니다. 다음은 VMRuntimePreflightCheck YAML 매니페스트 예시를 보여줍니다.
apiVersion: vm.cluster.gke.io/v1 kind: VMRuntimePreflightCheck metadata: name: vmruntime-preflight-check-manual namespace: vm-system