8.14. 고급 가상 머신 관리
8.14.1. 가상 머신의 리소스 할당량 작업
가상 시스템의 리소스 할당량을 생성하고 관리합니다.
8.14.1.1. 가상 머신의 리소스 할당량 제한 설정
요청만 사용하는 리소스 할당량은 VM(가상 머신)에서 자동으로 작동합니다. 리소스 할당량이 제한을 사용하는 경우 VM에 리소스 제한을 수동으로 설정해야 합니다. 리소스 제한은 리소스 요청보다 100MiB 이상이어야 합니다.
절차
VirtualMachine
매니페스트를 편집하여 VM에 대한 제한을 설정합니다. 예를 들면 다음과 같습니다.apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: with-limits spec: running: false template: spec: domain: # ... resources: requests: memory: 128Mi limits: memory: 256Mi 1
- 1
limits.memory
값이requests.memory
값보다 큰100Mi
이상이므로 이 구성이 지원됩니다.
-
VirtualMachine
매니페스트를 저장합니다.
8.14.1.2. 추가 리소스
8.14.2. 가상 머신용 노드 지정
노드 배치 규칙을 사용하여 특정 노드에 VM(가상 머신)을 배치할 수 있습니다.
8.14.2.1. 가상 머신의 노드 배치 정보
VM(가상 머신)이 적절한 노드에서 실행되도록 노드 배치 규칙을 구성할 수 있습니다. 다음과 같은 경우 이 작업을 수행할 수 있습니다.
- 여러 개의 VM이 있습니다. 내결함성을 보장하기 위해 서로 다른 노드에서 실행하려고 합니다.
- 두 개의 가상 머신이 있습니다. 중복 노드 간 라우팅을 방지하기 위해 VM을 동일한 노드에서 실행하려고 합니다.
- VM에는 사용 가능한 모든 노드에 존재하지 않는 특정 하드웨어 기능이 필요합니다.
- 노드에 기능을 추가하는 Pod가 있으며 해당 노드에 VM을 배치하여 해당 기능을 사용할 수 있습니다.
가상 머신 배치는 워크로드에 대한 기존 노드 배치 규칙에 의존합니다. 워크로드가 구성 요소 수준의 특정 노드에서 제외되면 해당 노드에 가상 머신을 배치할 수 없습니다.
VirtualMachine
매니페스트의 spec
필드에 다음 규칙 유형을 사용할 수 있습니다.
nodeSelector
- 이 필드에서 지정하는 키-값 쌍으로 레이블이 지정된 노드에서 가상 머신을 예약할 수 있습니다. 노드에는 나열된 모든 쌍과 정확히 일치하는 라벨이 있어야 합니다.
유사성
더 많은 표현 구문을 사용하여 노드와 가상 머신의 일치 규칙을 설정할 수 있습니다. 예를 들어, 규칙을 엄격한 요구 사항이 아닌 기본 설정으로 지정할 수 있으므로 규칙이 충족되지 않은 경우에도 가상 머신을 예약할 수 있습니다. 가상 머신 배치에는 Pod 유사성, Pod 비유사성 및 노드 유사성이 지원됩니다.
VirtualMachine
워크로드 유형이Pod
오브젝트를 기반으로 하므로 Pod 유사성은 가상 머신에서 작동합니다.참고유사성 규칙은 스케줄링 중에만 적용됩니다. 제약 조건이 더 이상 충족되지 않는 경우 OpenShift Container Platform은 실행 중인 워크로드를 다시 예약하지 않습니다.
허용 오차
- 일치하는 테인트가 있는 노드에 가상 머신을 예약할 수 있습니다. 테인트가 노드에 적용되는 경우, 해당 노드는 테인트를 허용하는 가상 머신만 허용합니다.
8.14.2.2. 노드 배치의 예
다음 예시 YAML 파일 조각에서는 nodePlacement
, affinity
및 tolerations
필드를 사용하여 가상 머신의 노드 배치를 사용자 지정합니다.
8.14.2.2.1. 예제: nodeSelector를 사용한 VM 노드 배치
이 예에서 가상 시스템에는 example-key-1 = example-value-1
및 example-key-2 = example-value-2
레이블을 모두 포함하는 메타데이터가 있는 노드가 필요합니다.
이 설명에 맞는 노드가 없으면 가상 머신이 예약되지 않습니다.
VM 매니페스트 예
metadata: name: example-vm-node-selector apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: template: spec: nodeSelector: example-key-1: example-value-1 example-key-2: example-value-2 ...
8.14.2.2.2. 예제: Pod 유사성 및 Pod 유사성 방지를 사용한 VM 노드 배치
이 예에서는 example-key-1 = example-value-1
레이블이 있는 실행 중인 pod가 있는 노드에 VM을 예약해야 합니다. 노드에 실행 중인 Pod가 없는 경우 VM은 예약되지 않습니다.
가능한 경우 example-key-2 = example-value-2
레이블이 있는 Pod가 있는 노드에 VM이 예약되지 않습니다. 그러나 모든 후보 노드에 이 레이블이 있는 Pod가 있는 경우 스케줄러는 이 제약 조건을 무시합니다.
VM 매니페스트 예
metadata: name: example-vm-pod-affinity apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: 1 - labelSelector: matchExpressions: - key: example-key-1 operator: In values: - example-value-1 topologyKey: kubernetes.io/hostname podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: example-key-2 operator: In values: - example-value-2 topologyKey: kubernetes.io/hostname ...
8.14.2.2.3. 예제: 노드 유사성을 사용한 VM 노드 배치
이 예에서 VM은 example.io/example-key = example-value-1
레이블 또는 example.io/example-key = example-value-2
레이블이 있는 노드에 예약해야 합니다. 노드에 레이블 중 하나만 있는 경우 제약 조건이 충족됩니다. 레이블이 모두 없으면 VM이 예약되지 않습니다.
가능한 경우 스케줄러는 example-node-label-key = example-node-label-value
레이블이 있는 노드를 피합니다. 그러나 모든 후보 노드에 이 레이블이 있으면 스케줄러는 이 제약 조건을 무시합니다.
VM 매니페스트 예
metadata: name: example-vm-node-affinity apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: 1 nodeSelectorTerms: - matchExpressions: - key: example.io/example-key operator: In values: - example-value-1 - example-value-2 preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 1 preference: matchExpressions: - key: example-node-label-key operator: In values: - example-node-label-value ...
8.14.2.2.4. 예제: 허용 오차를 사용한 VM 노드 배치
이 예에서는 가상 머신에 예약된 노드가 key=virtualization:NoSchedule
테인트로 레이블이 지정됩니다. 이 가상 머신에는 tolerations
가 일치하므로 테인트된 노드에 예약할 수 있습니다.
해당 테인트가 있는 노드에 스케줄링하는 데 테인트를 허용하는 가상 머신은 필요하지 않습니다.
VM 매니페스트 예
metadata: name: example-vm-tolerations apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: tolerations: - key: "key" operator: "Equal" value: "virtualization" effect: "NoSchedule" ...
8.14.2.3. 추가 리소스
8.14.3. 인증서 교체 구성
기존 인증서를 교체하도록 인증서 교체 매개 변수를 구성합니다.
8.14.3.1. 인증서 교체 구성
웹 콘솔에서 또는 HyperConverged
CR(사용자 정의 리소스)에 설치 후 OpenShift Virtualization을 설치하는 동안 이 작업을 수행할 수 있습니다.
절차
다음 명령을 실행하여
HyperConverged
CR을 엽니다.$ oc edit hco -n openshift-cnv kubevirt-hyperconverged
다음 예와 같이
spec.certConfig
필드를 편집합니다. 시스템 과부하를 방지하려면 모든 값이 10분 이상인지 확인합니다. golangParseDuration
형식을 준수하는 문자열로 모든 값을 표현합니다.apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: certConfig: ca: duration: 48h0m0s renewBefore: 24h0m0s 1 server: duration: 24h0m0s 2 renewBefore: 12h0m0s 3
- YAML 파일을 클러스터에 적용합니다.
8.14.3.2. 인증서 교체 매개변수 문제 해결
기본값이 다음 조건 중 하나와 충돌하지 않는 한 하나 이상의 certConfig
값을 삭제하면 기본값으로 되돌아갑니다.
-
ca.renewBefore
의 값은ca.duration
값보다 작거나 같아야 합니다. -
server.duration
의 값은ca.duration
값보다 작거나 같아야 합니다. -
server.renewBefore
의 값은server.duration
값보다 작거나 같아야 합니다.
기본값이 이러한 조건과 충돌하면 오류가 발생합니다.
다음 예제에서 server.duration
값을 제거하는 경우 기본값 24h0m0s
는 ca.duration
값보다 크므로 지정된 조건과 충돌합니다.
예
certConfig: ca: duration: 4h0m0s renewBefore: 1h0m0s server: duration: 4h0m0s renewBefore: 4h0m0s
이 경우 다음과 같은 오류 메시지가 표시됩니다.
error: hyperconvergeds.hco.kubevirt.io "kubevirt-hyperconverged" could not be patched: admission webhook "validate-hco.kubevirt.io" denied the request: spec.certConfig: ca.duration is smaller than server.duration
오류 메시지는 첫 번째 충돌만 표시합니다. 진행하기 전에 모든 certConfig 값을 검토합니다.
8.14.4. 관리 작업 자동화
Red Hat Ansible Automation Platform을 사용하여 OpenShift Virtualization 관리 작업을 자동화할 수 있습니다. Ansible Playbook을 사용하여 새 가상 머신을 생성하며 기본 사항을 살펴보십시오.
8.14.4.1. Red Hat Ansible Automation 정보
Ansible은 시스템 구성, 소프트웨어 배포, 롤링 업데이트 수행에 사용되는 자동화 툴입니다. Ansible은 OpenShift Virtualization을 지원하며, Ansible 모듈을 사용하면 템플릿, 영구 볼륨 클레임, 가상 머신 작업과 같은 클러스터 관리 작업을 자동화할 수 있습니다.
Ansible을 통해 OpenShift Virtualization 관리를 자동화할 수 있으며, 이러한 자동화는 oc
CLI 툴 또는 API를 통해서도 수행할 수 있습니다. Ansible은 KubeVirt 모듈을 다른 Ansible 모듈과 통합할 수 있다는 점에서 고유합니다.
8.14.4.2. 가상 머신 생성 자동화
kubevirt_vm
Ansible Playbook을 사용하면 Red Hat Ansible Automation Platform을 통해 OpenShift Container Platform 클러스터에 가상 머신을 생성할 수 있습니다.
사전 요구 사항
- Red Hat Ansible Engine 버전 2.8 이상
절차
kubevirt_vm
작업이 포함되도록 Ansible Playbook YAML 파일을 편집합니다.kubevirt_vm: namespace: name: cpu_cores: memory: disks: - name: volume: containerDisk: image: disk: bus:
참고이 스니펫에는 플레이북의
kubevirt_vm
부분만 포함됩니다.생성할 가상 머신을 반영하도록
namespace
,cpu_cores
수,memory
,disks
등의 값을 편집합니다. 예를 들면 다음과 같습니다.kubevirt_vm: namespace: default name: vm1 cpu_cores: 1 memory: 64Mi disks: - name: containerdisk volume: containerDisk: image: kubevirt/cirros-container-disk-demo:latest disk: bus: virtio
생성 후 즉시 가상 머신을 부팅하려면 YAML 파일에
state: running
을 추가합니다. 예를 들면 다음과 같습니다.kubevirt_vm: namespace: default name: vm1 state: running 1 cpu_cores: 1
- 1
- 이 값을
state: absent
로 변경하면 이미 존재하는 가상 머신이 삭제됩니다.
플레이북의 파일 이름을 유일한 인수로 사용하여
ansible-playbook
명령을 실행합니다.$ ansible-playbook create-vm.yaml
출력을 검토하여 실행이 성공했는지 확인합니다.
출력 예
(...) TASK [Create my first VM] ************************************************************************ changed: [localhost] PLAY RECAP ******************************************************************************************************** localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
플레이북 파일에
state:running
을 포함하지 않은 경우 지금 VM을 부팅하려면state:running
을 포함하도록 파일을 편집한 후 플레이북을 다시 실행합니다.$ ansible-playbook create-vm.yaml
가상 머신이 생성되었는지 확인하려면 VM 콘솔에 액세스하십시오.
8.14.4.3. 예제: 가상 머신 생성을 위한 Ansible Playbook
kubevirt_vm
Ansible Playbook을 사용하여 가상 머신 생성을 자동화할 수 있습니다.
다음 YAML 파일은 kubevirt_vm
플레이북의 예입니다. 이 예에는 샘플 값이 포함되어 있으며, 플레이북을 실행하는 경우 해당 값을 사용자의 정보로 교체해야 합니다.
--- - name: Ansible Playbook 1 hosts: localhost connection: local tasks: - name: Create my first VM kubevirt_vm: namespace: default name: vm1 cpu_cores: 1 memory: 64Mi disks: - name: containerdisk volume: containerDisk: image: kubevirt/cirros-container-disk-demo:latest disk: bus: virtio
8.14.5. 가상 머신에 EFI 모드 사용
EFI(Extensible Firmware Interface) 모드에서 VM(가상 머신)을 부팅할 수 있습니다.
8.14.5.1. 가상 머신의 EFI 모드 정보
레거시 BIOS와 같이 EFI(Extensible Firmware Interface)는 컴퓨터가 시작될 때 하드웨어 구성 요소 및 운영 체제 이미지 파일을 초기화합니다. EFI는 BIOS보다 최신 기능 및 더 많은 사용자 지정 옵션을 지원하므로 부팅 시간이 단축됩니다.
ESP(EFI System Partition)라는 특수 파티션에 저장된 .efi
확장자로 파일에 초기화 및 시작에 대한 모든 정보를 저장합니다. ESP에는 컴퓨터에 설치된 운영 체제용 부트 로더 프로그램도 포함되어 있습니다.
OpenShift Virtualization은 EFI 모드를 사용하는 경우 Secure Boot가 있는 VM(가상 머신)만 지원합니다. Secure Boot가 활성화되지 않으면 VM이 반복적으로 충돌합니다. 그러나 VM이 Secure Boot를 지원하지 않을 수 있습니다. VM을 부팅하기 전에 VM 설정을 확인하여 Secure Boot를 지원하는지 확인하십시오.
8.14.5.2. EFI 모드에서 가상 머신 부팅
VM 또는 VMI 매니페스트를 편집하여 EFI 모드에서 부팅하도록 가상 머신을 구성할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다.
절차
VM 개체 또는 VMI(가상 머신 인스턴스) 오브젝트를 정의하는 YAML 파일을 생성합니다. 예시 YAML 파일의 펌웨어 스탠자를 사용합니다.
보안 부팅이 활성화된 EFI 모드에서 부팅
apiversion: kubevirt.io/v1 kind: VirtualMachineInstance metadata: labels: special: vmi-secureboot name: vmi-secureboot spec: domain: devices: disks: - disk: bus: virtio name: containerdisk features: acpi: {} smm: enabled: true 1 firmware: bootloader: efi: secureBoot: true 2 ...
다음 명령을 실행하여 클러스터에 매니페스트를 적용합니다.
$ oc create -f <file_name>.yaml
8.14.6. 가상 머신에 대한 PXE 부팅 구성
OpenShift Virtualization에서는 PXE 부팅 또는 네트워크 부팅을 사용할 수 있습니다. 네트워크 부팅의 경우 로컬로 연결된 스토리지 장치 없이 컴퓨터에서 운영 체제 또는 기타 프로그램을 부팅 및 로드할 수 있습니다. 예를 들어, 새 호스트를 배포할 때 PXE 서버에서 원하는 OS 이미지를 선택할 수 있습니다.
8.14.6.1. 사전 요구 사항
- Linux 브리지가 연결되어 있어야 합니다.
- PXE 서버는 브리지와 동일한 VLAN에 연결되어 있어야 합니다.
8.14.6.2. 지정된 MAC 주소로 PXE 부팅
관리자는 PXE 네트워크에 대한 NetworkAttachmentDefinition
오브젝트를 생성한 후 네트워크를 통해 클라이언트를 부팅할 수 있습니다. 그런 다음 가상 머신 인스턴스 구성 파일에서 네트워크 연결 정의를 참조한 후 가상 머신 인스턴스를 시작할 수 있습니다. PXE 서버에 필요한 경우 가상 머신 인스턴스 구성 파일에 MAC 주소를 지정할 수도 있습니다.
사전 요구 사항
- Linux 브리지가 연결되어 있어야 합니다.
- PXE 서버는 브리지와 동일한 VLAN에 연결되어 있어야 합니다.
절차
클러스터에서 PXE 네트워크를 구성합니다.
PXE 네트워크
pxe-net-conf
에 대한 네트워크 연결 정의 파일을 만듭니다.apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: pxe-net-conf spec: config: '{ "cniVersion": "0.3.1", "name": "pxe-net-conf", "plugins": [ { "type": "cnv-bridge", "bridge": "br1", "vlan": 1 1 }, { "type": "cnv-tuning" 2 } ] }'
참고VLAN이 요청된 액세스 포트를 통해 가상 머신 인스턴스가 브리지
br1
에 연결됩니다.
이전 단계에서 만든 파일을 사용하여 네트워크 연결 정의를 생성합니다.
$ oc create -f pxe-net-conf.yaml
인터페이스 및 네트워크에 대한 세부 정보를 포함하도록 가상 머신 인스턴스 구성 파일을 편집합니다.
PXE 서버에 필요한 경우 네트워크 및 MAC 주소를 지정합니다. MAC 주소를 지정하지 않으면 값이 자동으로 할당됩니다.
인터페이스가 먼저 부팅되도록
bootOrder
가1
로 설정되어 있는지 확인하십시오. 이 예에서는 인터페이스가<pxe-net>
이라는 네트워크에 연결되어 있습니다.interfaces: - masquerade: {} name: default - bridge: {} name: pxe-net macAddress: de:00:00:00:00:de bootOrder: 1
참고부팅 순서는 인터페이스 및 디스크에 대해 전역적입니다.
운영 체제가 프로비저닝되면 올바르게 부팅되도록 부팅 장치 번호를 디스크에 할당합니다.
디스크의
bootOrder
값을2
로 설정합니다.devices: disks: - disk: bus: virtio name: containerdisk bootOrder: 2
네트워크를 이전에 생성한 네트워크 연결 정의에 연결하도록 지정합니다. 이 시나리오에서
<pxe-net>
는<pxe-net-conf>
라는 네트워크 연결 정의에 연결됩니다.networks: - name: default pod: {} - name: pxe-net multus: networkName: pxe-net-conf
가상 머신 인스턴스를 생성합니다.
$ oc create -f vmi-pxe-boot.yaml
출력 예
virtualmachineinstance.kubevirt.io "vmi-pxe-boot" created
가상 머신 인스턴스가 실행될 때까지 기다립니다.
$ oc get vmi vmi-pxe-boot -o yaml | grep -i phase phase: Running
VNC를 사용하여 가상 머신 인스턴스를 확인합니다.
$ virtctl vnc vmi-pxe-boot
- 부팅 화면에서 PXE 부팅에 성공했는지 확인합니다.
가상 머신 인스턴스에 로그인합니다.
$ virtctl console vmi-pxe-boot
가상 머신의 인터페이스 및 MAC 주소를 확인하고, 브릿지에 연결된 인터페이스에 MAC 주소가 지정되었는지 확인합니다. 이 예제에서는 IP 주소 없이 PXE 부팅에
eth1
을 사용했습니다. 다른 인터페이스인eth0
은 OpenShift Container Platform에서 IP 주소를 가져왔습니다.$ ip addr
출력 예
... 3. eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether de:00:00:00:00:de brd ff:ff:ff:ff:ff:ff
8.14.6.3. 템플릿: PXE 부팅을 위한 가상 머신 인스턴스 구성 파일
apiVersion: kubevirt.io/v1 kind: VirtualMachineInstance metadata: creationTimestamp: null labels: special: vmi-pxe-boot name: vmi-pxe-boot spec: domain: devices: disks: - disk: bus: virtio name: containerdisk bootOrder: 2 - disk: bus: virtio name: cloudinitdisk interfaces: - masquerade: {} name: default - bridge: {} name: pxe-net macAddress: de:00:00:00:00:de bootOrder: 1 machine: type: "" resources: requests: memory: 1024M networks: - name: default pod: {} - multus: networkName: pxe-net-conf name: pxe-net terminationGracePeriodSeconds: 0 volumes: - name: containerdisk containerDisk: image: kubevirt/fedora-cloud-container-disk-demo - cloudInitNoCloud: userData: | #!/bin/bash echo "fedora" | passwd fedora --stdin name: cloudinitdisk status: {}
8.14.7. 게스트 메모리 관리
특정 사용 사례에 맞게 게스트 메모리 설정을 조정하려면 게스트의 YAML 구성 파일을 편집하면 됩니다. OpenShift Virtualization에서는 게스트 메모리 과다 할당을 구성하고 게스트 메모리 오버헤드 계산을 비활성화할 수 있습니다.
다음 절차를 수행하면 메모리 부족으로 인해 가상 머신 프로세스가 종료될 가능성이 높아집니다. 이러한 위험을 인지하는 경우에만 진행하십시오.
8.14.7.1. 게스트 메모리 과다 할당 구성
가상 워크로드에 사용 가능한 것보다 많은 메모리가 필요한 경우, 메모리 과다 할당을 사용하여 호스트의 메모리 전체 또는 대부분을 VMI(가상 머신 인스턴스)에 할당할 수 있습니다. 메모리 과다 할당을 사용하면 일반적으로 호스트에 예약되는 리소스를 최대화할 수 있습니다.
예를 들어 호스트에 32GB RAM이 있으면 메모리 과다 할당을 사용하여 각각 4GB의 RAM이 있는 VM(가상 머신) 8개를 만들 수 있습니다. 이러한 할당은 가상 머신에서 모든 메모리를 동시에 사용하지 않는다는 가정 하에 작동합니다.
메모리를 과다 할당하면 메모리 부족(OOM 종료)으로 인해 가상 머신 프로세스가 종료될 가능성이 높아집니다.
VM이 OOM인해 종료될 가능성은 특정 구성, 노드 메모리, 사용 가능한 스왑 공간, 가상 머신 메모리 사용량, 커널 동일 페이지 병합(KSM) 및 기타 요인에 따라 달라집니다.
절차
클러스터에서 요청한 것보다 사용 가능한 메모리가 많다는 것을 가상 머신 인스턴스에 명시적으로 알리기 위해 가상 머신 구성 파일을 편집하여
spec.domain.memory.guest
를spec.domain.resources.requests.memory
보다 높은 값으로 설정합니다. 이 과정을 메모리 과다 할당이라고 합니다.이 예제에서는 클러스터에서
1024M
를 요청했지만 가상 머신 인스턴스에는2048M
가 사용 가능한 것으로 표시됩니다. 노드에 사용 가능한 메모리가 충분한 경우 가상 머신 인스턴스에서 최대 2048M를 사용합니다.kind: VirtualMachine spec: template: domain: resources: requests: memory: 1024M memory: guest: 2048M
참고노드의 메모리가 부족한 경우에는 Pod에 대한 제거 규칙과 동일한 제거 규칙이 가상 머신 인스턴스에 적용됩니다.
가상 머신을 생성합니다.
$ oc create -f <file_name>.yaml
8.14.7.2. 게스트 메모리 오버헤드 계산 비활성화
사용자가 요청한 양 이외에 각 가상 머신 인스턴스에서 소량의 메모리를 요청합니다. 이러한 추가 메모리는 각 VirtualMachineInstance
프로세스를 래핑하는 인프라에 사용됩니다.
일반적으로 권장되지는 않지만 게스트 메모리 오버헤드 계산을 비활성화하여 노드에서 가상 머신 인스턴스의 밀도를 높일 수 있습니다.
게스트 메모리 오버헤드 계산을 비활성화하면 메모리 부족(OOM 종료됨)으로 인해 가상 머신 프로세스가 종료될 가능성이 높아집니다.
VM이 OOM인해 종료될 가능성은 특정 구성, 노드 메모리, 사용 가능한 스왑 공간, 가상 머신 메모리 사용량, 커널 동일 페이지 병합(KSM) 및 기타 요인에 따라 달라집니다.
절차
게스트 메모리 오버헤드 계산을 사용하지 않으려면 YAML 구성 파일을 편집하여
overcommitGuestOverhead
값을true
로 설정합니다. 이 매개변수는 기본적으로 비활성화되어 있습니다.kind: VirtualMachine spec: template: domain: resources: overcommitGuestOverhead: true requests: memory: 1024M
참고overcommitGuestOverhead
가 활성화되면 게스트 오버헤드가 메모리 제한에 추가됩니다(있는 경우).가상 머신을 생성합니다.
$ oc create -f <file_name>.yaml
8.14.8. 가상 머신에서 대규모 페이지 사용
대규모 페이지를 클러스터의 가상 머신 백업 메모리로 사용할 수 있습니다.
8.14.8.1. 사전 요구 사항
- 노드에 사전 할당된 대규모 페이지가 구성되어 있어야 합니다.
8.14.8.2. 대규모 페이지의 기능
메모리는 페이지라는 블록으로 관리됩니다. 대부분의 시스템에서 한 페이지는 4Ki입니다. 1Mi 메모리는 256페이지와 같고 1Gi 메모리는 256,000페이지에 해당합니다. CPU에는 하드웨어에서 이러한 페이지 목록을 관리하는 내장 메모리 관리 장치가 있습니다. TLB(Translation Lookaside Buffer)는 가상-물리적 페이지 매핑에 대한 소규모 하드웨어 캐시입니다. TLB에 하드웨어 명령어로 전달된 가상 주소가 있으면 매핑을 신속하게 확인할 수 있습니다. 가상 주소가 없으면 TLB 누락이 발생하고 시스템에서 소프트웨어 기반 주소 변환 속도가 느려져 성능 문제가 발생합니다. TLB 크기는 고정되어 있으므로 TLB 누락 가능성을 줄이는 유일한 방법은 페이지 크기를 늘리는 것입니다.
대규모 페이지는 4Ki보다 큰 메모리 페이지입니다. x86_64 아키텍처의 일반적인 대규모 페이지 크기는 다음과 같습니다. 2Mi 및 1Gi. 다른 아키텍처에서는 크기가 달라집니다. 대규모 페이지를 사용하려면 애플리케이션이 인식할 수 있도록 코드를 작성해야 합니다. THP(투명한 대규모 페이지)에서는 애플리케이션 지식 없이 대규모 페이지 관리를 자동화하려고 하지만 한계가 있습니다. 특히 페이지 크기 2Mi로 제한됩니다. THP에서는 THP 조각 모음 작업으로 인해 메모리 사용률이 높아지거나 조각화가 발생하여 노드에서 성능이 저하될 수 있으며 이로 인해 메모리 페이지가 잠길 수 있습니다. 이러한 이유로 일부 애플리케이션은 THP 대신 사전 할당된 대규모 페이지를 사용하도록 설계(또는 권장)할 수 있습니다.
OpenShift Virtualization에서는 사전 할당된 대규모 페이지를 사용하도록 가상 머신을 구성할 수 있습니다.
8.14.8.3. 가상 머신용 대규모 페이지 구성
가상 머신 구성에 memory.hugepages.pageSize
및 resources.requests.memory
매개변수를 포함하여 사전 할당된 대규모 페이지를 사용하도록 가상 머신을 구성할 수 있습니다.
메모리 요청은 페이지 크기로 나눌 수 있어야합니다. 예를 들면 페이지 크기가 1Gi
인 500Mi
의 메모리는 요청할 수 없습니다.
호스트와 게스트 OS의 메모리 레이아웃은 관련이 없습니다. 가상 머신 매니페스트에서 요청된 대규모 페이지가 QEMU에 적용됩니다. 게스트 내부의 대규모 페이지는 사용 가능한 가상 머신 인스턴스 메모리 양을 기준으로만 구성할 수 있습니다.
실행 중인 가상 머신을 편집하는 경우 변경 사항을 적용하려면 가상 머신을 재부팅해야 합니다.
사전 요구 사항
- 노드에 사전 할당된 대규모 페이지가 구성되어 있어야 합니다.
절차
가상 머신 구성에서
spec.domain
에resources.requests.memory
및memory.hugepages.pageSize
매개변수를 추가합니다. 다음 구성 스니펫에서는 가상 머신에서 각 페이지 크기가1Gi
인 총4Gi
의 메모리를 요청합니다.kind: VirtualMachine ... spec: domain: resources: requests: memory: "4Gi" 1 memory: hugepages: pageSize: "1Gi" 2 ...
가상 머신 구성을 적용합니다.
$ oc apply -f <virtual_machine>.yaml
8.14.9. 가상 머신 전용 리소스 사용
성능 향상을 위해 CPU와 같은 노드 리소스를 가상 머신에 전용으로 지정할 수 있습니다.
8.14.9.1. 전용 리소스 정보
가상 머신에 전용 리소스를 사용하면 가상 머신의 워크로드가 다른 프로세스에서 사용하지 않는 CPU에 예약됩니다. 전용 리소스를 사용하면 가상 머신의 성능과 대기 시간 예측 정확도를 개선할 수 있습니다.
8.14.9.2. 사전 요구 사항
-
노드에 CPU 관리자를 구성해야 합니다. 가상 머신 워크로드를 예약하기 전에 노드에
cpumanager = true
라벨이 있는지 확인하십시오. - 가상 머신의 전원을 꺼야 합니다.
8.14.9.3. 가상 머신 전용 리소스 활성화
세부 정보 탭에서 가상 머신 전용 리소스를 활성화할 수 있습니다. Red Hat 템플릿 또는 마법사를 사용하여 생성된 가상 머신을 전용 리소스로 활성화할 수 있습니다.
절차
-
사이드 메뉴에서 워크로드
가상 머신을 클릭합니다. - 가상 머신을 선택하여 가상 머신 탭을 엽니다.
- 세부 정보 탭을 클릭합니다.
- 전용 리소스 필드 오른쪽에 있는 연필 아이콘을 클릭하여 전용 리소스 창을 엽니다.
- 전용 리소스(보장된 정책)를 사용하여 이 워크로드 예약을 선택합니다.
- 저장을 클릭합니다.
8.14.10. 가상 머신 예약
호환성을 위해 VM의 CPU 모델과 정책 특성이 노드에서 지원하는 CPU 모델 및 정책 특성과 일치하도록 하면 노드에 VM(가상 머신)을 예약할 수 있습니다.
8.14.10.1. 정책 특성 이해
VM(가상 머신)을 노드에 예약할 때 호환성을 위해 일치하는 정책 특성과 CPU 기능을 지정하면 VM을 예약할 수 있습니다. VM에 지정되는 정책 특성에 따라 VM이 노드에서 예약되는 방식이 결정됩니다.
정책 특성 | 설명 |
---|---|
force | VM이 노드에 강제로 예약됩니다. 호스트 CPU에서 VM CPU를 지원하지 않는 경우에도 마찬가지입니다. |
require | VM이 특정 CPU 모델 및 기능 사양으로 구성되지 않은 경우 VM에 적용되는 기본 정책입니다. 이 기본 정책 특성 또는 다른 정책 특성 중 하나를 사용하여 CPU 노드 검색을 지원하도록 노드를 구성하지 않으면 해당 노드에 VM이 예약되지 않습니다. 호스트 CPU가 VM의 CPU를 지원하거나 하이퍼바이저가 지원되는 CPU 모델을 에뮬레이션할 수 있어야 합니다. |
optional | 호스트의 물리적 머신 CPU에서 VM을 지원하는 경우 해당 VM이 노드에 추가됩니다. |
disable | CPU 노드 검색을 통해 VM을 예약할 수 없습니다. |
forbid | 호스트 CPU에서 기능을 지원하고 CPU 노드 검색을 사용할 수 있는 경우에도 VM을 예약할 수 없습니다. |
8.14.10.2. 정책 특성 및 CPU 기능 설정
각 VM(가상 머신)에 대한 정책 특성 및 CPU 기능을 설정하면 정책 및 기능에 따라 노드에 VM을 예약할 수 있습니다. 설정한 CPU 기능은 호스트 CPU의 지원 여부 또는 하이퍼바이저의 에뮬레이션 여부를 확인하기 위해 검증됩니다.
8.14.10.3. 지원되는 CPU 모델을 사용하여 가상 머신 예약
VM(가상 머신) 또는 VMI(가상 머신 인스턴스)의 CPU 모델을 구성하면 해당 CPU 모델이 지원되는 노드에 VM 또는 VMI를 예약할 수 있습니다.
절차
가상 머신 구성 파일의
domain
사양을 편집합니다. 다음 예제에서는 VMI에 대해 정의된 특정 CPU 모델을 보여줍니다.apiVersion: kubevirt.io/v1 kind: VirtualMachineInstance metadata: name: myvmi spec: domain: cpu: model: Conroe 1
- 1
- VMI의 CPU 모델입니다.
8.14.10.4. 호스트 모델을 사용하여 가상 머신 예약
VM(가상 머신)의 CPU 모델이 host-model
로 설정되어 있으면 VM은 예약된 노드의 CPU 모델을 상속합니다.
절차
VM 구성 파일의
domain
사양을 편집합니다. 다음 예제에서는 VMI(가상 머신 인스턴스)에 지정되는host-model
을 보여줍니다.apiVersion: kubevirt/v1alpha3 kind: VirtualMachineInstance metadata: name: myvmi spec: domain: cpu: model: host-model 1
- 1
- 예약된 노드의 CPU 모델을 상속하는 VM 또는 VMI입니다.
8.14.11. PCI 패스스루 구성
PCI(Peripheral Component Interconnect) 패스스루 기능을 사용하면 가상 머신에서 하드웨어 장치에 액세스하고 관리할 수 있습니다. PCI 패스스루가 구성되면 PCI 장치는 게스트 운영 체제에 물리적으로 연결된 것처럼 작동합니다.
클러스터 관리자는 oc
CLI(명령줄 인터페이스)를 사용하여 클러스터에서 사용할 수 있는 호스트 장치를 노출하고 관리할 수 있습니다.
8.14.11.1. PCI 패스스루를 위한 호스트 장치 준비 정보
CLI를 사용하여 PCI 패스스루를 위한 호스트 장치를 준비하려면 MachineConfig
오브젝트를 생성하고 커널 인수를 추가하여 IOMMU(Input-Output Memory Management Unit)를 활성화합니다. PCI 장치를 VFIO(가상 기능 I/O) 드라이버에 연결한 다음 HyperConverged
CR(사용자 정의 리소스)의 allowedHostDevices
필드를 편집하여 클러스터에 노출합니다. OpenShift Virtualization Operator를 처음 설치할 때 permittedHostDevices
목록이 비어 있습니다.
CLI를 사용하여 클러스터에서 PCI 호스트 장치를 제거하려면 HyperConverged
CR에서 PCI 장치 정보를 삭제합니다.
8.14.11.1.1. IOMMU 드라이버를 활성화하려면 커널 인수 추가
커널에서 IOMMU(Input-Output Memory Management Unit) 드라이버를 활성화하려면 MachineConfig
개체를 생성하고 커널 인수를 추가합니다.
사전 요구 사항
- OpenShift Container Platform 클러스터에 대한 관리자 권한을 보유하고 있어야 합니다.
- Intel 또는 AMD CPU 하드웨어.
- BIOS의 Directed I/O 확장용 Intel Virtualization Technology 또는 AMD IOMMU(Basic Input/Output System)가 활성화되어 있습니다.
절차
커널 인수를 식별하는
MachineConfig
오브젝트를 만듭니다. 다음 예제에서는 Intel CPU에 대한 커널 인수를 보여줍니다.apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker 1 name: 100-worker-iommu 2 spec: config: ignition: version: 3.2.0 kernelArguments: - intel_iommu=on 3 ...
새
MachineConfig
오브젝트를 만듭니다.$ oc create -f 100-worker-kernel-arg-iommu.yaml
검증
새
MachineConfig
오브젝트가 추가되었는지 확인합니다.$ oc get MachineConfig
8.14.11.1.2. VFIO 드라이버에 PCI 장치 바인딩
PCI 장치를 VFIO(Virtual Function I/O) 드라이버에 바인딩하려면 각 장치에서 vendor-ID
및 device-ID
값을 가져오고 값으로 목록을 생성합니다. MachineConfig
오브젝트에 이 목록을 추가합니다. MachineConfig
Operator는 PCI 장치가 있는 노드에 /etc/modprobe.d/vfio.conf
를 생성하고 PCI 장치를 VFIO 드라이버에 바인딩합니다.
사전 요구 사항
- CPU에 IOMMU를 사용하도록 커널 인수를 추가했습니다.
절차
lspci
명령을 실행하여 PCI 장치의vendor-ID
및device-ID
를 가져옵니다.$ lspci -nnv | grep -i nvidia
출력 예
02:01.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] [10de:1eb8] (rev a1)
Virtual config 파일
100-worker-vfiopci.bu
를 생성하여 PCI 장치를 VFIO 드라이버에 바인딩합니다.참고Butane에 대한 자세한 내용은 “Butane 을 사용하여 머신 구성 생성”을 참조하십시오.
예
variant: openshift version: 4.8.0 metadata: name: 100-worker-vfiopci labels: machineconfiguration.openshift.io/role: worker 1 storage: files: - path: /etc/modprobe.d/vfio.conf mode: 0644 overwrite: true contents: inline: | options vfio-pci ids=10de:1eb8 2 - path: /etc/modules-load.d/vfio-pci.conf 3 mode: 0644 overwrite: true contents: inline: vfio-pci
Butane을 사용하여 작업자 노드로 전달할 구성이 포함된
MachineConfig
오브젝트 파일100-worker-vfiopci.yaml
을 생성합니다.$ butane 100-worker-vfiopci.bu -o 100-worker-vfiopci.yaml
작업자 노드에
MachineConfig
오브젝트를 적용합니다.$ oc apply -f 100-worker-vfiopci.yaml
MachineConfig
오브젝트가 추가되었는지 확인합니다.$ oc get MachineConfig
출력 예
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 00-worker d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-master-container-runtime d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-master-kubelet d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-worker-container-runtime d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-worker-kubelet d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 100-worker-iommu 3.2.0 30s 100-worker-vfiopci-configuration 3.2.0 30s
검증
VFIO 드라이버가 로드되었는지 확인합니다.
$ lspci -nnk -d 10de:
출력은 VFIO 드라이버가 사용 중인지 확인합니다.
출력 예
04:00.0 3D controller [0302]: NVIDIA Corporation GP102GL [Tesla P40] [10de:1eb8] (rev a1) Subsystem: NVIDIA Corporation Device [10de:1eb8] Kernel driver in use: vfio-pci Kernel modules: nouveau
8.14.11.1.3. CLI를 사용하여 클러스터에 PCI 호스트 장치 노출
클러스터에 PCI 호스트 장치를 노출하려면 PCI 장치에 대한 세부 정보를 HyperConverged
CR(사용자 정의 리소스)의 spec.permittedHostDevices
배열에 추가합니다.
절차
다음 명령을 실행하여 기본 편집기에서
HyperConverged
CR을 편집합니다.$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
spec.permittedHostDevices.pciHostDevices
어레이에 PCI 장치 정보를 추가합니다. 예를 들면 다음과 같습니다.설정 파일 예
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: permittedHostDevices: 1 pciHostDevices: 2 - pciDeviceSelector: "10DE:1DB6" 3 resourceName: "nvidia.com/GV100GL_Tesla_V100" 4 - pciDeviceSelector: "10DE:1EB8" resourceName: "nvidia.com/TU104GL_Tesla_T4" - pciDeviceSelector: "8086:6F54" resourceName: "intel.com/qat" externalResourceProvider: true 5 ...
참고위의 예제 스니펫은 이름이
nvidia.com/GV100GL_Tesla_V100
이고nvidia.com/TU104GL_Tesla_T4
가HyperConverged
CR에서 허용된 호스트 장치 목록에 추가된 두 개의 PCI 호스트 장치를 보여줍니다. 이러한 장치는 OpenShift Virtualization에서 작동하도록 테스트 및 검증되었습니다.- 변경 사항을 저장하고 편집기를 종료합니다.
검증
다음 명령을 실행하여 PCI 호스트 장치가 노드에 추가되었는지 확인합니다. 예제 출력에서는 각각
nvidia.com/GV100GL_Tesla_V100
,nvidia.com/TU104GL_Tesla_T4
,intel.com/qat
리소스 이름과 연결된 하나의 장치가 있음을 보여줍니다.$ oc describe node <node_name>
출력 예
Capacity: cpu: 64 devices.kubevirt.io/kvm: 110 devices.kubevirt.io/tun: 110 devices.kubevirt.io/vhost-net: 110 ephemeral-storage: 915128Mi hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 131395264Ki nvidia.com/GV100GL_Tesla_V100 1 nvidia.com/TU104GL_Tesla_T4 1 intel.com/qat: 1 pods: 250 Allocatable: cpu: 63500m devices.kubevirt.io/kvm: 110 devices.kubevirt.io/tun: 110 devices.kubevirt.io/vhost-net: 110 ephemeral-storage: 863623130526 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 130244288Ki nvidia.com/GV100GL_Tesla_V100 1 nvidia.com/TU104GL_Tesla_T4 1 intel.com/qat: 1 pods: 250
8.14.11.1.4. CLI를 사용하여 클러스터에서 PCI 호스트 장치 제거
클러스터에서 PCI 호스트 장치를 제거하려면 HyperConverged
CR(사용자 정의 리소스)에서 해당 장치의 정보를 삭제합니다.
절차
다음 명령을 실행하여 기본 편집기에서
HyperConverged
CR을 편집합니다.$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
적절한 장치의
pciDeviceSelector
,resourceName
및externalResourceProvider
(해당되는 경우) 필드를 삭제하여spec.permittedHostDevices.pciHostDevices
어레이에서 PCI 장치 정보를 제거합니다. 이 예에서는intel.com/qat
리소스가 삭제되었습니다.설정 파일 예
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: permittedHostDevices: pciHostDevices: - pciDeviceSelector: "10DE:1DB6" resourceName: "nvidia.com/GV100GL_Tesla_V100" - pciDeviceSelector: "10DE:1EB8" resourceName: "nvidia.com/TU104GL_Tesla_T4" ...
- 변경 사항을 저장하고 편집기를 종료합니다.
검증
다음 명령을 실행하여 PCI 호스트 장치가 노드에서 제거되었는지 확인합니다. 예제 출력에서는
intel.com/qat
리소스 이름과 연결된 장치가 0개 있음을 보여줍니다.$ oc describe node <node_name>
출력 예
Capacity: cpu: 64 devices.kubevirt.io/kvm: 110 devices.kubevirt.io/tun: 110 devices.kubevirt.io/vhost-net: 110 ephemeral-storage: 915128Mi hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 131395264Ki nvidia.com/GV100GL_Tesla_V100 1 nvidia.com/TU104GL_Tesla_T4 1 intel.com/qat: 0 pods: 250 Allocatable: cpu: 63500m devices.kubevirt.io/kvm: 110 devices.kubevirt.io/tun: 110 devices.kubevirt.io/vhost-net: 110 ephemeral-storage: 863623130526 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 130244288Ki nvidia.com/GV100GL_Tesla_V100 1 nvidia.com/TU104GL_Tesla_T4 1 intel.com/qat: 0 pods: 250
8.14.11.2. PCI 패스스루의 가상 머신 구성
PCI 장치를 클러스터에 추가하고 나면 가상 머신에 할당할 수 있습니다. 이제 PCI 장치를 가상 머신에 물리적으로 연결된 것처럼 사용할 수 있습니다.
8.14.11.2.1. 가상 머신에 PCI 장치 할당
PCI 장치를 클러스터에서 사용할 수 있는 경우 가상 머신에 할당하고 PCI 패스스루를 활성화할 수 있습니다.
절차
가상 시스템에 PCI 장치를 호스트 장치로 할당합니다.
예
apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: domain: devices: hostDevices: - deviceName: nvidia.com/TU104GL_Tesla_T4 1 name: hostdevices1
- 1
- 호스트 장치로 클러스터에서 허용되는 PCI 장치의 이름입니다. 가상 시스템은 이 호스트 장치에 액세스할 수 있습니다.
검증
다음 명령을 사용하여 가상 시스템에서 호스트 장치를 사용할 수 있는지 확인합니다.
$ lspci -nnk | grep NVIDIA
출력 예
$ 02:01.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] [10de:1eb8] (rev a1)
8.14.11.3. 추가 리소스
8.14.12. 워치독 구성
워치독 장치에 대해 VM(가상 머신)을 구성하고, 워치독을 설치한 후 워치독 서비스를 시작하여 워치독을 노출합니다.
8.14.12.1. 사전 요구 사항
-
가상 머신에는
i6300esb
워치독 장치에 대한 커널 지원이 있어야 합니다. RHEL(Red Hat Enterprise Linux) 이미지는i6300esb
를 지원합니다.
8.14.12.2. 워치독 장치 정의
운영 체제(OS)가 더 이상 응답하지 않을 때 워치독이 진행되는 방식을 정의합니다.
표 8.3. 사용 가능한 작업
|
VM(가상 시스템)의 전원이 즉시 꺼집니다. |
| VM이 재부팅되고 게스트 OS가 반응할 수 없습니다. 게스트 OS가 재부팅하는 데 필요한 시간은 활성 프로브가 시간 초과될 수 있으므로 이 옵션을 사용하지 않습니다. 클러스터 수준 보호에서 활성 프로브가 실패하고 강제로 다시 예약하는 경우 이 시간 초과로 VM을 재부팅하는 시간을 연장할 수 있습니다. |
| VM은 모든 서비스를 중지하여 정상적으로 전원을 끕니다. |
절차
다음 콘텐츠를 사용하여 YAML 파일을 생성합니다.
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: vm2-rhel84-watchdog name: <vm-name> spec: running: false template: metadata: labels: kubevirt.io/vm: vm2-rhel84-watchdog spec: domain: devices: watchdog: name: <watchdog> i6300esb: action: "poweroff" 1 ...
- 1
watchdog
작업 (poweroff
,reset
, 또는shutdown
)을 지정합니다.
위의 예제에서는 poweroff 작업을 사용하여 RHEL8 VM에서
i6300esb
워치독 장치를 구성하고 장치를/dev/watchdog
로 노출합니다.이제 워치독 바이너리에서 이 장치를 사용할 수 있습니다.
다음 명령을 실행하여 클러스터에 YAML 파일을 적용합니다.
$ oc apply -f <file_name>.yaml
이 절차는 워치독 기능을 테스트하는 데만 제공되며 프로덕션 시스템에서 실행해서는 안 됩니다.
다음 명령을 실행하여 VM이 워치독 장치에 연결되어 있는지 확인합니다.
$ lspci | grep watchdog -i
다음 명령 중 하나를 실행하여 워치독이 활성 상태인지 확인합니다.
커널 패닉을 트리거합니다.
# echo c > /proc/sysrq-trigger
워치독 서비스를 종료합니다.
# pkill -9 watchdog
8.14.12.3. 워치독 장치 설치
가상 머신에 watchdog
패키지를 설치하고 워치독 서비스를 시작합니다.
절차
root 사용자로
watchdog
패키지 및 종속성을 설치합니다.# yum install watchdog
/etc/watchdog.conf
파일에서 다음 행의 주석을 제거한 후 변경 사항을 저장합니다.#watchdog-device = /dev/watchdog
워치독 서비스가 부팅 시 시작되도록 활성화합니다.
# systemctl enable --now watchdog.service