10.18. 고급 가상 머신 관리
10.18.1. 가상 머신의 리소스 할당량 작업
가상 시스템의 리소스 할당량을 생성하고 관리합니다.
10.18.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
매니페스트를 저장합니다.
10.18.1.2. 추가 리소스
10.18.2. 가상 머신용 노드 지정
노드 배치 규칙을 사용하여 특정 노드에 VM(가상 머신)을 배치할 수 있습니다.
10.18.2.1. 가상 머신의 노드 배치 정보
VM(가상 머신)이 적절한 노드에서 실행되도록 노드 배치 규칙을 구성할 수 있습니다. 다음과 같은 경우 이 작업을 수행할 수 있습니다.
- 여러 개의 VM이 있습니다. 내결함성을 보장하기 위해 서로 다른 노드에서 실행하려고 합니다.
- 두 개의 가상 머신이 있습니다. 중복 노드 간 라우팅을 방지하기 위해 VM을 동일한 노드에서 실행하려고 합니다.
- VM에는 사용 가능한 모든 노드에 존재하지 않는 특정 하드웨어 기능이 필요합니다.
- 노드에 기능을 추가하는 Pod가 있으며 해당 노드에 VM을 배치하여 해당 기능을 사용할 수 있습니다.
가상 머신 배치는 워크로드에 대한 기존 노드 배치 규칙에 의존합니다. 워크로드가 구성 요소 수준의 특정 노드에서 제외되면 해당 노드에 가상 머신을 배치할 수 없습니다.
VirtualMachine
매니페스트의 spec
필드에 다음 규칙 유형을 사용할 수 있습니다.
nodeSelector
- 이 필드에서 지정하는 키-값 쌍으로 레이블이 지정된 노드에서 가상 머신을 예약할 수 있습니다. 노드에는 나열된 모든 쌍과 정확히 일치하는 라벨이 있어야 합니다.
유사성
더 많은 표현 구문을 사용하여 노드와 가상 머신의 일치 규칙을 설정할 수 있습니다. 예를 들어, 규칙을 엄격한 요구 사항이 아닌 기본 설정으로 지정할 수 있으므로 규칙이 충족되지 않은 경우에도 가상 머신을 예약할 수 있습니다. 가상 머신 배치에는 Pod 유사성, Pod 비유사성 및 노드 유사성이 지원됩니다.
VirtualMachine
워크로드 유형이Pod
오브젝트를 기반으로 하므로 Pod 유사성은 가상 머신에서 작동합니다.참고유사성 규칙은 스케줄링 중에만 적용됩니다. 제약 조건이 더 이상 충족되지 않는 경우 OpenShift Container Platform은 실행 중인 워크로드를 다시 예약하지 않습니다.
허용 오차
- 일치하는 테인트가 있는 노드에 가상 머신을 예약할 수 있습니다. 테인트가 노드에 적용되는 경우, 해당 노드는 테인트를 허용하는 가상 머신만 허용합니다.
10.18.2.2. 노드 배치의 예
다음 예시 YAML 파일 조각에서는 nodePlacement
, affinity
및 tolerations
필드를 사용하여 가상 머신의 노드 배치를 사용자 지정합니다.
10.18.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 ...
10.18.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: template: 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 # ...
10.18.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: template: 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 # ...
10.18.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" ...
10.18.2.3. 추가 리소스
10.18.3. 인증서 교체 구성
기존 인증서를 교체하도록 인증서 교체 매개 변수를 구성합니다.
10.18.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 파일을 클러스터에 적용합니다.
10.18.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 값을 검토합니다.
10.18.4. 가상 머신에 UEFI 모드 사용
UEFI(Unified Extensible Firmware Interface) 모드에서 VM(가상 머신)을 부팅할 수 있습니다.
10.18.4.1. 가상 머신의 UEFI 모드 정보
레거시 BIOS와 같은 UEFI(Unified Extensible Firmware Interface)는 컴퓨터가 시작될 때 하드웨어 구성 요소 및 운영 체제 이미지 파일을 초기화합니다. UEFI는 BIOS보다 최신 기능 및 사용자 정의 옵션을 지원하므로 부팅 시간이 단축됩니다.
ESP(EFI System Partition)라는 특수 파티션에 저장된 .efi
확장자로 파일에 초기화 및 시작에 대한 모든 정보를 저장합니다. ESP에는 컴퓨터에 설치된 운영 체제용 부트 로더 프로그램도 포함되어 있습니다.
10.18.4.2. UEFI 모드에서 가상 머신 부팅
VirtualMachine
매니페스트를 편집하여 UEFI 모드에서 부팅하도록 가상 머신을 구성할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다.
절차
VirtualMachine
매니페스트 파일을 편집하거나 생성합니다.spec.firmware.bootloader
스탠자를 사용하여 UEFI 모드를 설정합니다.보안 부팅이 활성화된 UEFI 모드에서 부팅
apiversion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: special: vm-secureboot name: vm-secureboot spec: template: metadata: labels: special: vm-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
10.18.5. 가상 머신에 대한 PXE 부팅 구성
OpenShift Virtualization에서는 PXE 부팅 또는 네트워크 부팅을 사용할 수 있습니다. 네트워크 부팅의 경우 로컬로 연결된 스토리지 장치 없이 컴퓨터에서 운영 체제 또는 기타 프로그램을 부팅 및 로드할 수 있습니다. 예를 들어, 새 호스트를 배포할 때 PXE 서버에서 원하는 OS 이미지를 선택할 수 있습니다.
10.18.5.1. 사전 요구 사항
- Linux 브리지가 연결되어 있어야 합니다.
- PXE 서버는 브리지와 동일한 VLAN에 연결되어 있어야 합니다.
10.18.5.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
10.18.5.3. OpenShift Virtualization 네트워킹 용어집
OpenShift Virtualization은 사용자 정의 리소스 및 플러그인을 사용하여 고급 네트워킹 기능을 제공합니다.
다음 용어는 OpenShift Virtualization 설명서 전체에서 사용됩니다.
- CNI(컨테이너 네트워크 인터페이스(Container Network Interface))
- 컨테이너 네트워크 연결에 중점을 둔 Cloud Native Computing Foundation 프로젝트입니다. OpenShift Virtualization에서는 CNI 플러그인을 사용하여 기본 Kubernetes 네트워킹 기능을 기반으로 빌드합니다.
- Multus
- Pod 또는 가상 머신에서 필요한 인터페이스를 사용할 수 있도록 여러 CNI가 존재할 수 있는 "메타" CNI 플러그인입니다.
- CRD(사용자 정의 리소스 정의(Custom Resource Definition))
- 사용자 정의 리소스를 정의할 수 있는 Kubernetes API 리소스 또는 CRD API 리소스를 사용하여 정의한 오브젝트입니다.
- 네트워크 연결 정의(NAD)
- Pod, 가상 머신, 가상 머신 인스턴스를 하나 이상의 네트워크에 연결할 수 있는 Multus 프로젝트에서 도입한 CRD입니다.
- 노드 네트워크 구성 정책(NNCP)
-
노드에서 요청된 네트워크 구성에 대한 설명입니다.
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하는 방식으로 인터페이스 추가 및 제거를 포함하여 노드 네트워크 구성을 업데이트합니다. - PXE(Preboot eXecution Environment)
- 관리자가 네트워크를 통해 서버에서 클라이언트 머신을 부팅할 수 있는 인터페이스입니다. 네트워크 부팅을 통해 운영 체제 및 기타 소프트웨어를 클라이언트에 원격으로 로드할 수 있습니다.
10.18.6. 가상 머신에서 대규모 페이지 사용
대규모 페이지를 클러스터의 가상 머신 백업 메모리로 사용할 수 있습니다.
10.18.6.1. 사전 요구 사항
- 노드에 사전 할당된 대규모 페이지가 구성되어 있어야 합니다.
10.18.6.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에서는 사전 할당된 대규모 페이지를 사용하도록 가상 머신을 구성할 수 있습니다.
10.18.6.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
10.18.7. 가상 머신 전용 리소스 사용
성능 향상을 위해 CPU와 같은 노드 리소스를 가상 머신에 전용으로 지정할 수 있습니다.
10.18.7.1. 전용 리소스 정보
가상 머신에 전용 리소스를 사용하면 가상 머신의 워크로드가 다른 프로세스에서 사용하지 않는 CPU에 예약됩니다. 전용 리소스를 사용하면 가상 머신의 성능과 대기 시간 예측 정확도를 개선할 수 있습니다.
10.18.7.2. 사전 요구 사항
-
노드에 CPU 관리자를 구성해야 합니다. 가상 머신 워크로드를 예약하기 전에 노드에
cpumanager = true
라벨이 있는지 확인하십시오. - 가상 머신의 전원을 꺼야 합니다.
10.18.7.3. 가상 머신 전용 리소스 활성화
세부 정보 탭에서 가상 머신 전용 리소스를 활성화합니다. Red Hat 템플릿에서 생성된 가상 머신은 전용 리소스로 구성할 수 있습니다.
절차
-
OpenShift Container Platform 콘솔 의 사이드 메뉴에서 가상화
VirtualMachine 를 클릭합니다. - 가상 머신을 선택하여 VirtualMachine 세부 정보 페이지를 엽니다.
- Scheduling 탭에서 전용 리소스 옆에 있는 연필 아이콘을 클릭합니다.
- 전용 리소스(보장된 정책)를 사용하여 이 워크로드 예약을 선택합니다.
- 저장을 클릭합니다.
10.18.8. 가상 머신 예약
호환성을 위해 VM의 CPU 모델과 정책 특성이 노드에서 지원하는 CPU 모델 및 정책 특성과 일치하도록 하면 노드에 VM(가상 머신)을 예약할 수 있습니다.
10.18.8.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을 예약할 수 없습니다. |
10.18.8.2. 정책 특성 및 CPU 기능 설정
각 VM(가상 머신)에 대한 정책 특성 및 CPU 기능을 설정하면 정책 및 기능에 따라 노드에 VM을 예약할 수 있습니다. 설정한 CPU 기능은 호스트 CPU의 지원 여부 또는 하이퍼바이저의 에뮬레이션 여부를 확인하기 위해 검증됩니다.
10.18.8.3. 지원되는 CPU 모델을 사용하여 가상 머신 예약
VM(가상 머신)의 CPU 모델을 구성하여 해당 CPU 모델이 지원되는 노드에 예약할 수 있습니다.
절차
가상 머신 구성 파일의
domain
사양을 편집합니다. 다음 예는 VM에 대해 정의된 특정 CPU 모델을 보여줍니다.apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: myvm spec: template: spec: domain: cpu: model: Conroe 1
- 1
- VM의 CPU 모델입니다.
10.18.8.4. 호스트 모델을 사용하여 가상 머신 예약
VM(가상 머신)의 CPU 모델이 host-model
로 설정되어 있으면 VM은 예약된 노드의 CPU 모델을 상속합니다.
절차
VM 구성 파일의
domain
사양을 편집합니다. 다음 예제에서는 가상 머신에 지정된host-model
을 보여줍니다.apiVersion: kubevirt/v1alpha3 kind: VirtualMachine metadata: name: myvm spec: template: spec: domain: cpu: model: host-model 1
- 1
- 예약된 노드의 CPU 모델을 상속하는 VM입니다.
10.18.9. PCI 패스스루 구성
PCI(Peripheral Component Interconnect) 패스스루 기능을 사용하면 가상 머신에서 하드웨어 장치에 액세스하고 관리할 수 있습니다. PCI 패스스루가 구성되면 PCI 장치는 게스트 운영 체제에 물리적으로 연결된 것처럼 작동합니다.
클러스터 관리자는 oc
CLI(명령줄 인터페이스)를 사용하여 클러스터에서 사용할 수 있는 호스트 장치를 노출하고 관리할 수 있습니다.
10.18.9.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 장치 정보를 삭제합니다.
10.18.9.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
10.18.9.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.12.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
10.18.9.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
10.18.9.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
10.18.9.2. PCI 패스스루의 가상 머신 구성
PCI 장치를 클러스터에 추가하고 나면 가상 머신에 할당할 수 있습니다. 이제 PCI 장치를 가상 머신에 물리적으로 연결된 것처럼 사용할 수 있습니다.
10.18.9.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)
10.18.9.3. 추가 리소스
10.18.10. vGPU passthrough 구성
가상 머신은 vGPU(가상 GPU) 하드웨어에 액세스할 수 있습니다. 가상 머신에 vGPU를 할당하면 다음을 수행할 수 있습니다.
- 기본 하드웨어의 GPU 중 일부에 액세스하여 가상 머신에서 고성능 이점을 실현할 수 있습니다.
- 리소스 집약적 I/O 작업을 간소화합니다.
vGPU 통과는 베어 메탈 환경에서 실행되는 클러스터에 연결된 장치에만 할당할 수 있습니다.
10.18.10.1. 가상 머신에 vGPU 패스스루 장치 할당
OpenShift Container Platform 웹 콘솔을 사용하여 가상 머신에 vGPU 패스스루 장치를 할당합니다.
사전 요구 사항
- 가상 머신을 중지해야 합니다.
절차
-
OpenShift Container Platform 웹 콘솔 의 사이드 메뉴에서 가상화
VirtualMachine 를 클릭합니다. - 장치를 할당할 가상 머신을 선택합니다.
세부 정보 탭에서 GPU 장치를 클릭합니다.
vGPU 장치를 호스트 장치로 추가하는 경우 VNC 콘솔을 사용하여 장치에 액세스할 수 없습니다.
- GPU 장치 추가를 클릭하고 Name 을 입력하고 장치 이름 목록에서 장치를 선택합니다.
- 저장을 클릭합니다.
-
YAML 탭을 클릭하여 새 장치가
hostDevices
섹션의 클러스터 구성에 추가되었는지 확인합니다.
사용자 지정 템플릿 또는 YAML 파일에서 생성된 가상 머신에 하드웨어 장치를 추가할 수 있습니다. Windows 10 또는 RHEL 7과 같은 특정 운영 체제의 사전 제공 부팅 소스 템플릿에 장치를 추가할 수 없습니다.
클러스터에 연결된 리소스를 표시하려면 사이드 메뉴에서 컴퓨팅 → 하드웨어 장치를 클릭합니다.
10.18.10.2. 추가 리소스
10.18.11. 중재된 장치 구성
OpenShift Virtualization은 HyperConverged
CR(사용자 정의 리소스)에 장치 목록을 제공하는 경우 가상 GPU(vGPU)와 같은 중재 장치를 자동으로 생성합니다.
중재된 장치의 선언적 구성은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
10.18.11.1. NVIDIA GPU Operator 사용 정보
NVIDIA GPU Operator는 OpenShift Container Platform 클러스터에서 NVIDIA GPU 리소스를 관리하고 부트스트랩 GPU 노드와 관련된 작업을 자동화합니다. GPU는 클러스터의 특수 리소스이므로 애플리케이션 워크로드를 GPU에 배포하기 전에 일부 구성 요소를 설치해야 합니다. 이러한 구성 요소에는 컴퓨팅 통합 장치 아키텍처(ECDHEDA), Kubernetes 장치 플러그인, 컨테이너 런타임 등을 활성화하는 NVIDIA 드라이버(자동 노드 레이블링, 모니터링 등)가 포함됩니다.
NVIDIA GPU Operator는 NVIDIA에서만 지원됩니다. NVIDIA에서 지원을 얻는 방법에 대한 자세한 내용은 NVIDIA에서 지원을 참조하십시오.
OpenShift Container Platform OpenShift Virtualization에서 GPU를 활성화하는 방법에는 여기에 설명된 OpenShift Container Platform 네이티브 방법과 NVIDIA GPU Operator를 사용하는 두 가지 방법이 있습니다.
NVIDIA GPU Operator는 OpenShift Container Platform OpenShift Virtualization이 OpenShift Container Platform에서 실행되는 가상화된 워크로드에 GPU를 노출할 수 있는 Kubernetes Operator입니다. 사용자는 GPU 지원 가상 머신을 쉽게 프로비저닝 및 관리할 수 있으므로 다른 워크로드와 동일한 플랫폼에서 복잡한 AI/머신 학습(AI/ML) 워크로드를 실행할 수 있습니다. 또한 인프라의 GPU 용량을 쉽게 확장할 수 있어 GPU 기반 워크로드를 빠르게 확장할 수 있습니다.
NVIDIA GPU Operator를 사용하여 GPU 가속 VM을 실행하기 위한 작업자 노드를 프로비저닝하는 방법에 대한 자세한 내용은 OpenShift Virtualization을 사용하는 NVIDIA GPU Operator를 참조하십시오.
10.18.11.2. OpenShift Virtualization에서 가상 GPU 사용 정보
일부 그래픽 처리 장치(GPU) 카드는 가상 GPU(vGPU) 생성을 지원합니다. 관리자가 HyperConverged
CR(사용자 정의 리소스)에서 구성 세부 정보를 제공하면 OpenShift Virtualization에서 vGPUs 및 기타 중재 장치를 자동으로 생성할 수 있습니다. 이 자동화는 특히 대규모 클러스터에 유용합니다.
기능 및 지원 세부 정보는 하드웨어 벤더의 설명서를 참조하십시오.
- 중재된 장치
- 하나 이상의 가상 장치로 분할되는 물리적 장치입니다. vGPU는 중재된 장치(mdev) 유형입니다. 물리 GPU의 성능은 가상 장치 간에 나뉩니다. 하나 이상의 VM(가상 머신)에 미디어화된 장치를 할당할 수 있지만 게스트 수는 GPU와 호환되어야 합니다. 일부 GPU는 여러 게스트를 지원하지 않습니다.
10.18.11.2.1. 사전 요구 사항
하드웨어 벤더가 드라이버를 제공하는 경우 중재 장치를 생성하려는 노드에 설치합니다.
- NVIDIA 카드를 사용하는 경우 NVIDIA GRID 드라이버를 설치했습니다.
10.18.11.2.2. 구성 개요
중재된 장치를 구성할 때 관리자는 다음 작업을 완료해야 합니다.
- 중재된 장치를 만듭니다.
- 중재된 장치를 클러스터에 노출합니다.
HyperConverged
CR에는 두 작업을 모두 수행하는 API가 포함되어 있습니다.
중재된 장치 생성
... spec: mediatedDevicesConfiguration: mediatedDevicesTypes: 1 - <device_type> nodeMediatedDeviceTypes: 2 - mediatedDevicesTypes: 3 - <device_type> nodeSelector: 4 <node_selector_key>: <node_selector_value> ...
중재된 장치를 클러스터로 노출
... permittedHostDevices: mediatedDevices: - mdevNameSelector: GRID T4-2Q 1 resourceName: nvidia.com/GRID_T4-2Q 2 ...
- 1
- 호스트의 이 값에 매핑되는 중재 장치를 노출합니다.참고
/sys/bus/pci/devices/<slot>:<bus>:<domain>.<function>/mdev_supported_types/<type>/name
의 내용을 보고 지원하는 중재 장치 유형을 확인할 수 있습니다.예를 들어
nvidia-231
유형의 이름 파일에는 선택기 문자열GRID T4-2Q
가 포함되어 있습니다.GRID T4-2Q
를mdevNameSelector
값으로 사용하면 노드가nvidia-231
유형을 사용할 수 있습니다. - 2
resourceName
은 노드에 할당된 것과 일치해야 합니다. 다음 명령을 사용하여resourceName
을 찾습니다.$ oc get $NODE -o json \ | jq '.status.allocatable \ | with_entries(select(.key | startswith("nvidia.com/"))) \ | with_entries(select(.value != "0"))'
10.18.11.2.3. 노드에 vGPU를 할당하는 방법
각 물리적 장치에 대해 OpenShift Virtualization은 다음 값을 구성합니다.
- 단일 mdev 유형.
-
선택한
mdev
유형의 최대 인스턴스 수입니다.
클러스터 아키텍처는 장치를 생성하고 노드에 할당하는 방법에 영향을 미칩니다.
- 노드당 여러 개의 카드가 있는 대규모 클러스터
유사한 vGPU 유형을 지원할 수 있는 여러 카드가 있는 노드에서 관련 장치 유형이 라운드 로빈 방식으로 생성됩니다. 예를 들면 다음과 같습니다.
... mediatedDevicesConfiguration: mediatedDevicesTypes: - nvidia-222 - nvidia-228 - nvidia-105 - nvidia-108 ...
이 시나리오에서는 각 노드에 다음 vGPU 유형을 지원하는 두 개의 카드가 있습니다.
nvidia-105 ... nvidia-108 nvidia-217 nvidia-299 ...
각 노드에서 OpenShift Virtualization은 다음과 같은 vGPU를 생성합니다.
- 첫 번째 카드에 nvidia-105 유형의 16 vGPU.
- 두 번째 카드에서 nvidia-108 유형의 vGPU.
- 한 노드에는 하나 이상의 요청된 vGPU 유형을 지원하는 단일 카드가 있습니다.
OpenShift Virtualization은
mediatedDevicesTypes
목록에서 먼저 제공되는 지원되는 유형을 사용합니다.예를 들어 노드 카드의 카드는
nvidia-223
및nvidia-224
를 지원합니다. 다음mediatedDevicesTypes
목록이 구성됩니다.... mediatedDevicesConfiguration: mediatedDevicesTypes: - nvidia-22 - nvidia-223 - nvidia-224 ...
이 예에서 OpenShift Virtualization은
nvidia-223
유형을 사용합니다.
10.18.11.2.4. 미디어된 장치 변경 및 제거 정보
클러스터의 중재 장치 구성은 다음을 통해 OpenShift Virtualization으로 업데이트할 수 있습니다.
-
HyperConverged
CR을 편집하고mediatedDevicesTypes
스탠자의 내용을 변경합니다. -
node
MediatedDeviceTypes 노드
선택기와 일치하는 노드 레이블 변경 HyperConverged
CR의spec.mediatedDevicesConfiguration
및spec.permittedHostDevices
스탠자에서 장치 정보를 제거합니다.참고spec.permittedHostDevices
스탠자에서도spec.mediatedDevicesConfiguration
스탠자에서 장치 정보를 제거하지 않으면 동일한 노드에 새 중재 장치 유형을 생성할 수 없습니다. 중재된 장치를 올바르게 제거하려면 두 스탠자에서 장치 정보를 제거합니다.
이러한 작업은 특정 변경 사항에 따라 OpenShift Virtualization에서 미디어를 재구성하거나 클러스터 노드에서 해당 장치를 제거합니다.
10.18.11.2.5. 중재된 장치를 위한 호스트 준비
중재 장치를 구성하려면 먼저 IOMMU(Input-Output Memory Management Unit) 드라이버를 활성화해야 합니다.
10.18.11.2.5.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
10.18.11.2.6. 미디어된 장치 추가 및 제거
중재된 장치를 추가하거나 제거할 수 있습니다.
10.18.11.2.6.1. 미디어된 장치 생성 및 노출
HyperConverged
CR(사용자 정의 리소스)을 편집하여 가상 GPU(vGPU)와 같은 중재 장치를 노출하고 생성할 수 있습니다.
사전 요구 사항
- IOMMU(Input-Output Memory Management Unit) 드라이버를 활성화했습니다.
절차
다음 명령을 실행하여 기본 편집기에서
HyperConverged
CR을 편집합니다.$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
중재된 장치 정보를
HyperConverged
CR사양에
추가하여mediatedDevicesConfiguration
및permittedHostDevices
스탠자를 포함하도록 합니다. 예를 들면 다음과 같습니다.설정 파일 예
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: mediatedDevicesConfiguration: <.> mediatedDevicesTypes: <.> - nvidia-231 nodeMediatedDeviceTypes: <.> - mediatedDevicesTypes: <.> - nvidia-233 nodeSelector: kubernetes.io/hostname: node-11.redhat.com permittedHostDevices: <.> mediatedDevices: - mdevNameSelector: GRID T4-2Q resourceName: nvidia.com/GRID_T4-2Q - mdevNameSelector: GRID T4-8Q resourceName: nvidia.com/GRID_T4-8Q ...
<.>는 미디어 장치를 생성합니다. <.> Required: Global
mediatedDevicesTypes
configuration. <.> 선택 사항: 특정 노드의 글로벌 구성을 재정의합니다. <.>nodeMediatedDeviceTypes
를 사용하는 경우 필요합니다. <.> 클러스터에 미디어 지정된 장치를 노출합니다.- 변경 사항을 저장하고 편집기를 종료합니다.
검증
다음 명령을 실행하여 장치가 특정 노드에 추가되었는지 확인할 수 있습니다.
$ oc describe node <node_name>
10.18.11.2.6.2. CLI를 사용하여 클러스터에서 중재된 장치 제거
클러스터에서 미디어 장치를 제거하려면 HyperConverged
CR(사용자 정의 리소스)에서 해당 장치의 정보를 삭제합니다.
절차
다음 명령을 실행하여 기본 편집기에서
HyperConverged
CR을 편집합니다.$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
HyperConverged
CR의spec.mediatedDevicesConfiguration
및spec.permittedHostDevices
스탠자에서 장치 정보를 제거합니다. 두 항목을 모두 제거하면 나중에 동일한 노드에 새로 중재된 장치 유형을 만들 수 있습니다. 예를 들면 다음과 같습니다.설정 파일 예
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: mediatedDevicesConfiguration: mediatedDevicesTypes: 1 - nvidia-231 permittedHostDevices: mediatedDevices: 2 - mdevNameSelector: GRID T4-2Q resourceName: nvidia.com/GRID_T4-2Q
- 변경 사항을 저장하고 편집기를 종료합니다.
10.18.11.3. 중재 장치 사용
vGPU는 중재된 장치 유형입니다. 물리적 GPU의 성능은 가상 장치로 나뉩니다. 중재 장치를 하나 이상의 가상 머신에 할당할 수 있습니다.
10.18.11.3.1. 가상 머신에 중재 장치 할당
가상 GPU(가상 GPU)와 같은 중재 장치를 가상 머신에 할당합니다.
사전 요구 사항
-
중재된 장치는
HyperConverged
사용자 정의 리소스에서 구성됩니다.
절차
VirtualMachine
매니페스트의spec.domain.devices.gpus
스탠자를 편집하여 VM(가상 머신)에 중재된 장치를 할당합니다.가상 머신 매니페스트 예
apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: domain: devices: gpus: - deviceName: nvidia.com/TU104GL_Tesla_T4 1 name: gpu1 2 - deviceName: nvidia.com/GRID_T4-1Q name: gpu2
검증
가상 머신에서 장치를 사용할 수 있는지 확인하려면
VirtualMachine
매니페스트의deviceName
값을 사용하여 <device_name
>을 대체하는 다음 명령을 실행합니다.$ lspci -nnk | grep <device_name>
10.18.11.4. 추가 리소스
10.18.12. 워치독 구성
워치독 장치에 대해 VM(가상 머신)을 구성하고, 워치독을 설치한 후 워치독 서비스를 시작하여 워치독을 노출합니다.
10.18.12.1. 사전 요구 사항
-
가상 머신에는
i6300esb
워치독 장치에 대한 커널 지원이 있어야 합니다. RHEL(Red Hat Enterprise Linux) 이미지는i6300esb
를 지원합니다.
10.18.12.2. 워치독 장치 정의
운영 체제(OS)가 더 이상 응답하지 않을 때 워치독이 진행되는 방식을 정의합니다.
표 10.4. 사용 가능한 작업
|
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
10.18.12.3. 워치독 장치 설치
가상 머신에 watchdog
패키지를 설치하고 워치독 서비스를 시작합니다.
절차
root 사용자로
watchdog
패키지 및 종속성을 설치합니다.# yum install watchdog
/etc/watchdog.conf
파일에서 다음 행의 주석을 제거한 후 변경 사항을 저장합니다.#watchdog-device = /dev/watchdog
워치독 서비스가 부팅 시 시작되도록 활성화합니다.
# systemctl enable --now watchdog.service
10.18.12.4. 추가 리소스
10.18.13. 사전 정의된 부팅 소스 자동 가져오기 및 업데이트
시스템 정의이고 OpenShift Virtualization 또는 사용자가 생성한 사용자 정의 에 포함된 부팅 소스를 사용할 수 있습니다. 시스템 정의 부팅 소스 가져오기 및 업데이트는 제품 기능 게이트에 의해 제어됩니다. 기능 게이트를 사용하여 업데이트를 사용, 비활성화 또는 다시 활성화할 수 있습니다. 사용자 정의 부팅 소스는 제품 기능 게이트에 의해 제어되지 않으며 자동 가져오기 및 업데이트를 선택하거나 옵트아웃하기 위해 개별적으로 관리되어야 합니다.
버전 4.10부터 OpenShift Virtualization은 수동으로 비활성화하거나 기본 스토리지 클래스를 설정하지 않는 한 부팅 소스를 자동으로 가져오고 업데이트합니다.
버전 4.10으로 업그레이드하는 경우, 버전 4.9 또는 이전 버전에서 부팅 소스에 대한 자동 가져오기 및 업데이트를 수동으로 활성화해야 합니다.
10.18.13.1. 자동 부팅 소스 업데이트 활성화
OpenShift Virtualization 4.9 또는 이전 버전에서 부팅 소스가 있는 경우 이러한 부팅 소스에 대한 자동 업데이트를 수동으로 활성화해야 합니다. OpenShift Virtualization 4.10 이상의 모든 부팅 소스는 기본적으로 자동으로 업데이트됩니다.
자동 부팅 소스 가져오기 및 업데이트를 활성화하려면 자동으로 업데이트하려는 각 부팅 소스에 대해 cdi.kubevirt.io/dataImportCron
필드를 true
로 설정합니다.
절차
부팅 소스에 대한 자동 업데이트를 활성화하려면 다음 명령을 사용하여 데이터 소스에
dataImportCron
레이블을 적용합니다.$ oc label --overwrite DataSource rhel8 -n openshift-virtualization-os-images cdi.kubevirt.io/dataImportCron=true 1
- 1
true
를 지정하면rhel8
부팅 소스의 자동 업데이트가 실행됩니다.
10.18.13.2. 자동 부팅 소스 업데이트 비활성화
자동 부팅 소스 가져오기 및 업데이트를 비활성화하면 연결이 끊긴 환경의 로그 수를 줄이거나 리소스 사용량을 줄이는 데 유용할 수 있습니다.
자동 부팅 소스 가져오기 및 업데이트를 비활성화하려면 HyperConverged
CR(사용자 정의 리소스)의 spec.featureGates.enableCommonBootImageImport
필드를 false
로 설정합니다.
사용자 정의 부팅 소스는 이 설정의 영향을 받지 않습니다.
절차
다음 명령을 사용하여 자동 부팅 소스 업데이트를 비활성화합니다.
$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": "/spec/featureGates/enableCommonBootImageImport", \ "value": false}]'
10.18.13.3. 자동 부팅 소스 업데이트 다시 활성화
이전에 자동 부팅 소스 업데이트를 비활성화한 경우 해당 기능을 수동으로 다시 활성화해야 합니다. HyperConverged
CR(사용자 정의 리소스)의 spec.featureGates.enableCommonBootImageImport
필드를 true
로 설정합니다.
절차
다음 명령을 사용하여 자동 업데이트를 다시 활성화합니다.
$ oc patch hco kubevirt-hyperconverged -n openshift-cnv --type json -p '[{"op": "replace", "path": "/spec/featureGates/enableCommonBootImageImport", "value": true}]'
10.18.13.4. 사용자 정의 부팅 소스 업데이트를 위한 스토리지 클래스 구성
사용자 정의 부팅 소스에 대해 자동 가져오기 및 업데이트를 허용하는 스토리지 클래스를 구성할 수 있습니다.
절차
HyperConverged
CR(사용자 정의 리소스)을 편집하여 새storageClassName
을 정의합니다.apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: name: rhel8-image-cron spec: template: spec: storageClassName: <appropriate_class_name> ...
다음 명령을 실행하여 새 기본 스토리지 클래스를 설정합니다.
$ oc patch storageclass <current_default_storage_class> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
$ oc patch storageclass <appropriate_storage_class> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
10.18.13.5. 사용자 정의 부팅 소스에 대한 자동 업데이트 활성화
OpenShift Virtualization은 기본적으로 시스템 정의 부팅 소스를 자동으로 업데이트하지만 사용자 정의 부팅 소스를 자동으로 업데이트하지는 않습니다. HyperConverged
CR(사용자 정의 리소스)을 편집하여 사용자 정의 부팅 소스에서 자동 가져오기 및 업데이트를 수동으로 활성화해야 합니다.
절차
다음 명령을 사용하여 편집할
HyperConverged
CR을 엽니다.$ oc edit -n openshift-cnv HyperConverged
HyperConverged
CR을 편집하여dataImportCronTemplates
섹션에 적절한 템플릿 및 부팅 소스를 추가합니다. 예를 들면 다음과 같습니다.CentOS 7의 예
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: name: centos7-image-cron annotations: cdi.kubevirt.io/storage.bind.immediate.requested: "true" 1 spec: schedule: "0 */12 * * *" 2 template: spec: source: registry: 3 url: docker://quay.io/containerdisks/centos:7-2009 storage: resources: requests: storage: 10Gi managedDataSource: centos7 4 retentionPolicy: "None" 5
- 1
volumeBindingMode
가 있는 스토리지 클래스에는WaitForFirstConsumer
가 설정되어 있는 스토리지 클래스에 필요합니다.- 2
- cron 형식으로 지정된 작업의 스케줄입니다.
- 3
- 을 사용하여 레지스트리 소스에서 데이터 볼륨을 생성합니다.
노드
docker 캐시를 기반으로 하는 기본pod
pullMethod
node
pullMethod 를 사용합니다.노드
Docker 캐시는Container.Image
를 통해 레지스트리 이미지를 사용할 수 있지만 CDI 가져오기자는 액세스할 수 있는 권한이 없는 경우에 유용합니다. - 4
- 사용자 지정 이미지를 사용 가능한 부팅 소스로 감지하려면 이미지의
managedDataSource
의 이름이 VM 템플릿 YAML 파일의spec.dataVolumeTemplates.spec.sourceRef.name
아래에 있는 템플릿의DataSource
와 일치해야 합니다. - 5
- cron 작업이 삭제될 때
All
을 사용하여 데이터 볼륨 및 데이터 소스를 유지합니다.None
을 사용하여 cron 작업이 삭제될 때 데이터 볼륨 및 데이터 소스를 삭제합니다.
10.18.13.6. 시스템 정의 또는 사용자 정의 부팅 소스에 대한 자동 업데이트 비활성화
사용자 정의 부팅 소스와 시스템 정의 부팅 소스에 대한 자동 가져오기 및 업데이트를 비활성화할 수 있습니다.
시스템 정의 부팅 소스는 HyperConverged
CR(사용자 정의 리소스)의 spec.dataImportCronTemplates
에 기본적으로 나열되지 않으므로 부팅 소스를 추가하고 자동 가져오기 및 업데이트를 비활성화해야 합니다.
절차
-
사용자 정의 부팅 소스에 대한 자동 가져오기 및 업데이트를 비활성화하려면 사용자 정의 리소스 목록의
spec.dataImportCronTemplates
필드에서 부팅 소스를 제거합니다. 시스템 정의 부팅 소스에 대한 자동 가져오기 및 업데이트를 비활성화하려면 다음을 수행합니다.
-
HyperConverged
CR을 편집하고spec.dataImportCronTemplates
에 부팅 소스를 추가합니다. dataimportcrontemplate.kubevirt.io/enable
주석을false
로 설정하여 자동 가져오기 및 업데이트를 비활성화합니다. 예를 들면 다음과 같습니다.apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: annotations: dataimportcrontemplate.kubevirt.io/enable: false name: rhel8-image-cron ...
-
10.18.13.7. 부팅 소스 상태 확인
부팅 소스가 시스템 정의인지 사용자 정의인지 확인할 수 있습니다.
HyperConverged
CR의
필드에 나열된 각 부팅 소스의 status 섹션은 부팅 소스 유형을 나타냅니다. 예를 들어, status
.dataImportChronTemplatescommonTemplate: true
는 시스템 정의(CommonTemplate
) 부팅 소스 및 status: {}
를 나타냅니다. {}는 사용자 정의 부팅 소스를 나타냅니다.
절차
-
oc get
명령을 사용하여HyperConverged
CR의dataImportChronTemplates
를 나열합니다. 부팅 소스의 상태를 확인합니다.
출력 예
... apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged ... spec: ... status: 1 ... dataImportCronTemplates: 2 - metadata: annotations: cdi.kubevirt.io/storage.bind.immediate.requested: "true" name: centos-7-image-cron spec: garbageCollect: Outdated managedDataSource: centos7 schedule: 55 8/12 * * * template: metadata: {} spec: source: registry: url: docker://quay.io/containerdisks/centos:7-2009 storage: resources: requests: storage: 30Gi status: {} status: commonTemplate: true 3 ... - metadata: annotations: cdi.kubevirt.io/storage.bind.immediate.requested: "true" name: user-defined-dic spec: garbageCollect: Outdated managedDataSource: user-defined-centos-stream8 schedule: 55 8/12 * * * template: metadata: {} spec: source: registry: pullMethod: node url: docker://quay.io/containerdisks/centos-stream:8 storage: resources: requests: storage: 30Gi status: {} status: {} 4 ...
10.18.14. 가상 머신에서 Descheduler 제거 활성화
Descheduler를 사용하여 Pod를 제거하여 더 적절한 노드에 Pod를 다시 예약할 수 있습니다. Pod가 가상 머신인 경우 Pod 제거를 통해 가상 머신이 다른 노드로 실시간 마이그레이션됩니다.
가상 머신의 Descheduler 제거는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
10.18.14.1. Descheduler 프로필
기술 프리뷰 DevPreviewLongLifecycle
프로필을 사용하여 가상 시스템에서 Descheduler를 활성화합니다. 현재 OpenShift Virtualization에서 사용할 수 있는 유일한 Descheduler 프로필입니다. 적절한 스케줄링을 위해 예상되는 부하에 대한 CPU 및 메모리 요청이 있는 VM을 생성합니다.
DevPreviewLongLifecycle
이 프로필은 노드 간 리소스 사용량의 균형을 조정하고 다음 전략을 활성화합니다.
-
RemovePodsHavingTooManyRestarts
: 컨테이너가 너무 여러 번 재시작된 Pod와 모든 컨테이너에 대한 재시작 횟수( Init Containers 포함)가 100개 이상인 Pod를 제거합니다. VM 게스트 운영 체제를 다시 시작해도 이 수가 늘어나지 않습니다. LowNodeUtilization
: 활용도가 낮은 노드가 있는 경우 활용도가 높은 노드에서 Pod를 제거합니다. 제거된 Pod의 대상 노드는 스케줄러에 의해 결정됩니다.- 모든 임계값(CPU, 메모리, Pod 수)에서 사용량이 20% 미만인 경우 노드는 활용도가 낮은 것으로 간주됩니다.
- 모든 임계값(CPU, 메모리, Pod 수)에서 사용량이 50%를 초과하면 노드는 과도하게 사용되는 것으로 간주됩니다.
-
10.18.14.2. Descheduler 설치
Descheduler는 기본적으로 사용할 수 없습니다. Descheduler를 활성화하려면 OperatorHub에서 Kube Descheduler Operator를 설치하고 Descheduler 프로필을 한 개 이상 활성화해야 합니다.
기본적으로 Descheduler는 예측 모드에서 실행되므로 Pod 제거만 시뮬레이션합니다. Descheduler가 Pod 제거를 수행할 수 있도록 모드를 자동으로 변경해야 합니다.
클러스터에서 호스트된 컨트롤 플레인을 활성화한 경우 사용자 정의 우선순위 임계값을 설정하여 호스트된 컨트롤 플레인 네임스페이스의 Pod가 제거될 가능성을 낮춥니다. 호스팅된 컨트롤 플레인 우선 순위 클래스 클래스의 가장 낮은 우선 순위 값(100000000
)이 있으므로 우선순위 임계값 클래스 이름을 hypershift-control-plane
으로 설정합니다.
사전 요구 사항
- 클러스터 관리자 권한이 있어야 합니다.
- OpenShift Container Platform 웹 콘솔에 액세스합니다.
프로세스
- OpenShift Container Platform 웹 콘솔에 로그인합니다.
Kube Descheduler Operator에 필요한 네임스페이스를 생성합니다.
-
관리
네임스페이스로 이동하여 네임스페이스 생성을 클릭합니다. -
이름 필드에
openshift-kube-descheduler-operator
를 입력하고 Labels 필드에openshift.io/cluster-monitoring=true
를 입력하여 Descheduler 지표를 활성화한 다음 생성을 클릭합니다.
-
관리
Kube Descheduler Operator를 설치합니다.
-
Operators
OperatorHub로 이동합니다. - 필터 박스에 Kube Descheduler Operator를 입력합니다.
- Kube Descheduler Operator를 선택하고 설치를 클릭합니다.
- Operator 설치 페이지에서 클러스터의 특정 네임스페이스를 선택합니다. 드롭다운 메뉴에서 openshift-kube-descheduler-operator를 선택합니다.
- 업데이트 채널 및 승인 전략 값을 원하는 값으로 조정합니다.
- 설치를 클릭합니다.
-
Operators
Descheduler 인스턴스를 생성합니다.
-
Operator
설치된 Operator 페이지에서 Kube Descheduler Operator를 클릭합니다. - Kube Descheduler 탭을 선택하고 KubeDescheduler 생성을 클릭합니다.
필요에 따라 설정을 편집합니다.
- 제거를 시뮬레이션하는 대신 Pod를 제거하려면 Mode 필드를 자동으로 변경합니다.
Profiles 섹션을 확장하고
DevPreviewLongLifecycle
를 선택합니다.AffinityAndTaints
프로필은 기본적으로 활성화되어 있습니다.중요OpenShift Virtualization에서 현재 사용할 수 있는 유일한 프로필은
DevPreviewLongLifecycle
입니다.
-
Operator
나중에 OpenShift CLI(oc
)를 사용하여 Descheduler에 대한 프로필 및 설정을 구성할 수도 있습니다.
10.18.14.3. VM(가상 머신)에서 Descheduler 제거 활성화
Descheduler가 설치되면 VirtualMachine
CR(사용자 정의 리소스)에 주석을 추가하여 VM에서 Descheduler 제거를 활성화할 수 있습니다.
사전 요구 사항
-
OpenShift Container Platform 웹 콘솔 또는 OpenShift CLI(
oc
)에 Descheduler를 설치합니다. - VM이 실행되고 있지 않은지 확인합니다.
절차
VM을 시작하기 전에
VirtualMachine
CR에Descheduler.alpha.kubernetes.io/evict
주석을 추가합니다.apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: template: metadata: annotations: descheduler.alpha.kubernetes.io/evict: "true"
설치하는 동안 웹 콘솔에서
DevPreviewLongLifecycle
프로필을 아직 설정하지 않은 경우KubeDescheduler
오브젝트의spec.profile
섹션에DevPreviewLongLifecycle
를 지정합니다.apiVersion: operator.openshift.io/v1 kind: KubeDescheduler metadata: name: cluster namespace: openshift-kube-descheduler-operator spec: deschedulingIntervalSeconds: 3600 profiles: - DevPreviewLongLifecycle mode: Predictive 1
- 1
- 기본적으로 Descheduler는 Pod를 제거하지 않습니다. Pod를 제거하려면
mode
를Automatic
으로 설정합니다.
이제 VM에서 Descheduler가 활성화됩니다.