6장. 업데이트
6.1. OpenShift Virtualization 업데이트
OLM(Operator Lifecycle Manager)에서 OpenShift Virtualization에 z-stream 및 마이너 버전 업데이트를 제공하는 방법을 알아봅니다.
6.1.1. RHEL 9의 OpenShift Virtualization
OpenShift Virtualization 4.16은 RHEL(Red Hat Enterprise Linux) 9를 기반으로 합니다. 표준 OpenShift Virtualization 업데이트 절차에 따라 RHEL 8을 기반으로 하는 버전에서 OpenShift Virtualization 4.16으로 업데이트할 수 있습니다. 추가 단계는 필요하지 않습니다.
이전 버전과 마찬가지로 실행 중인 워크로드를 중단하지 않고 업데이트를 수행할 수 있습니다. OpenShift Virtualization 4.16은 RHEL 8 노드에서 RHEL 9 노드로의 실시간 마이그레이션을 지원합니다.
6.1.1.1. RHEL 9 머신 유형
OpenShift Virtualization에 포함된 모든 VM 템플릿은 이제 RHEL 9 머신 유형을 기본적으로 사용합니다. machineType: pc-q35-rhel9.<y>.0 .0.
여기서 < y
>는 RHEL 9의 최신 마이너 버전에 해당하는 단일 숫자입니다. 예를 들어, pc-q35-rhel9.2.0
값은 RHEL 9.2에 사용됩니다.
OpenShift Virtualization을 업데이트해도 기존 VM의 machineType
값은 변경되지 않습니다. 이러한 VM은 업데이트 전과 마찬가지로 계속 작동합니다. RHEL 9의 개선 사항을 활용할 수 있도록 VM의 머신 유형을 선택적으로 변경할 수 있습니다.
VM의 machineType
값을 변경하기 전에 VM을 종료해야 합니다.
6.1.2. OpenShift Virtualization 업데이트 정보
- OLM(Operator Lifecycle Manager)은 OpenShift Virtualization Operator의 라이프사이클을 관리합니다. OpenShift Container Platform 설치 중에 배포되는 Marketplace Operator는 클러스터에서 외부 Operator를 사용할 수 있도록 합니다.
- OLM은 OpenShift Virtualization에 z-stream 및 마이너 버전 업데이트를 제공합니다. OpenShift Container Platform을 다음 마이너 버전으로 업데이트할 때 마이너 버전 업데이트를 사용할 수 있습니다. 먼저 OpenShift Container Platform을 업데이트하지 않고 OpenShift Virtualization을 다음 마이너 버전으로 업데이트할 수 없습니다.
- OpenShift Virtualization 서브스크립션은 stable 이라는 단일 업데이트 채널을 사용합니다. stable 채널을 사용하면 OpenShift Virtualization 및 OpenShift Container Platform 버전이 호환됩니다.
서브스크립션의 승인 전략이 자동으로 설정된 경우 stable 채널에서 새 버전의 Operator를 사용할 수 있는 즉시 업데이트 프로세스가 시작됩니다. 자동 승인 전략을 사용하여 지원 가능한 환경을 유지하는 것이 좋습니다. OpenShift Virtualization의 각 부 버전은 해당 OpenShift Container Platform 버전을 실행하는 경우에만 지원됩니다. 예를 들어 OpenShift Container Platform 4.16에서 OpenShift Virtualization 4.16을 실행해야 합니다.
- 수동 승인 전략을 선택할 수 있지만 클러스터의 지원 가능성과 기능에 미칠 위험이 높기 때문에 이 방법은 권장되지 않는 것이 좋습니다. 수동 승인 전략을 사용하면 보류 중인 모든 업데이트를 수동으로 승인해야 합니다. OpenShift Container Platform 및 OpenShift Virtualization 업데이트가 동기화되지 않으면 클러스터가 지원되지 않습니다.
- 업데이트를 완료하는 데 걸리는 시간은 네트워크 연결에 따라 달라집니다. 대부분의 자동 업데이트는 15분 이내에 완료됩니다.
- OpenShift Virtualization을 업데이트해도 네트워크 연결이 중단되지 않습니다.
- 데이터 볼륨 및 관련 영구 볼륨 클레임은 업데이트 중에 유지됩니다.
hostpath 프로비전 프로그램 스토리지를 사용하는 가상 머신이 실행 중인 경우 실시간 마이그레이션할 수 없으며 OpenShift Container Platform 클러스터 업데이트를 차단할 수 있습니다.
이 문제를 해결하려면 클러스터 업데이트 중에 전원이 자동으로 꺼지도록 가상 머신을 재구성할 수 있습니다. evictionStrategy
필드를 None
으로 설정하고 runStrategy
필드를 Always
로 설정합니다.
6.1.2.1. 워크로드 업데이트 정보
OpenShift Virtualization을 업데이트하면 libvirt
,virt-launcher
, qemu
를 포함한 가상 머신 워크로드가 실시간 마이그레이션을 지원하는 경우 자동으로 업데이트됩니다.
각 가상 머신에는 VMI(가상 머신 인스턴스)를 실행하는 virt-launcher
Pod가 있습니다. virt-launcher
Pod는 VM(가상 머신) 프로세스를 관리하는 데 사용되는 libvirt
인스턴스를 실행합니다.
HyperConverged CR
(사용자 정의 리소스)의 spec.workloadUpdateStrategy
스탠자를 편집하여 워크로드가 업데이트되는 방법을 구성할 수 있습니다. 사용 가능한 워크로드 업데이트 방법은 LiveMigrate
및 Evict
입니다.
Evict
메서드는 VMI Pod를 종료하므로 LiveMigrate
업데이트 전략만 기본적으로 활성화됩니다.
LiveMigrate
가 유일하게 활성화된 업데이트 전략인 경우:
- 실시간 마이그레이션을 지원하는 VMI는 업데이트 프로세스 중에 마이그레이션됩니다. VM 게스트는 업데이트된 구성 요소가 활성화된 새 Pod로 이동합니다.
실시간 마이그레이션을 지원하지 않는 VMI는 중단되거나 업데이트되지 않습니다.
-
VMI에
LiveMigrate
제거 전략이 있지만 실시간 마이그레이션을 지원하지 않는 경우 업데이트되지 않습니다.
-
VMI에
LiveMigrate
및 Evict
를 모두 활성화하는 경우:
-
실시간 마이그레이션을 지원하는 VMI는
LiveMigrate
업데이트 전략을 사용합니다. -
실시간 마이그레이션을 지원하지 않는 VMI는
Evict
업데이트 전략을 사용합니다.runStrategy: Always
가 설정된VirtualMachine
오브젝트에서 VMI를 제어하는 경우 업데이트된 구성 요소가 있는 새 VMI가 새 Pod에 생성됩니다.
마이그레이션 시도 및 타임아웃
워크로드를 업데이트할 때 Pod가 다음 기간에 Pending
상태인 경우 실시간 마이그레이션이 실패합니다.
- 5분
-
Pod가
예약 불가
때문에 보류 중인 경우 . - 15분
- 어떤 이유로든 Pod가 보류 중 상태에 있는 경우입니다.
VMI가 마이그레이션에 실패하면 virt-controller
에서 다시 마이그레이션하려고 합니다. 새 virt-launcher
Pod에서 모든 편중 가능한 VMI가 실행될 때까지 이 프로세스를 반복합니다. VMI가 잘못 구성된 경우 이러한 시도는 무기한 반복될 수 있습니다.
각 시도는 마이그레이션 오브젝트에 해당합니다. 가장 최근의 5개의 시도만 버퍼에 저장됩니다. 이렇게 하면 마이그레이션 오브젝트가 디버깅에 대한 정보를 유지하면서 시스템에서 누적되지 않습니다.
6.1.2.2. EUS에서 EUS로의 업데이트 정보
4.10 및 4.12를 포함한 모든 OpenShift Container Platform 마이너 버전은 EUS (Extended Update Support) 버전입니다. 그러나 Kubernetes 설계에는 마이너 버전 업데이트가 필요하므로 하나의 EUS 버전에서 다음 EUS 버전으로 직접 업데이트할 수 없습니다.
소스 EUS 버전에서 다음 홀수의 마이너 버전으로 업데이트한 후 OpenShift Virtualization을 업데이트 경로에 있는 해당 마이너 버전의 모든 z-stream 릴리스로 순차적으로 업데이트해야 합니다. 최신 적용 가능한 z-stream 버전으로 업그레이드하면 OpenShift Container Platform을 대상 EUS 마이너 버전으로 업데이트할 수 있습니다.
OpenShift Container Platform 업데이트가 성공하면 OpenShift Virtualization에 대한 해당 업데이트를 사용할 수 있습니다. OpenShift Virtualization을 대상 EUS 버전으로 업데이트할 수 있습니다.
6.1.2.2.1. 업데이트 준비
EUS에서 EUS로의 업데이트를 시작하기 전에 다음을 수행해야 합니다.
- EUS-to-EUS 업데이트를 시작하기 전에 작업자 노드의 머신 구성 풀을 일시 중지하여 작업자가 두 번 재부팅되지 않습니다.
- 업데이트 프로세스를 시작하기 전에 자동 워크로드 업데이트를 비활성화합니다. 이는 대상 EUS 버전으로 업데이트할 때까지 OpenShift Virtualization이 VM(가상 머신)을 마이그레이션하거나 제거하지 않도록 하기 위한 것입니다.
기본적으로 OpenShift Virtualization은 OpenShift Virtualization Operator를 업데이트할 때 virt-launcher
Pod와 같은 워크로드를 자동으로 업데이트합니다. HyperConverged
사용자 정의 리소스의 spec.workloadUpdateStrategy
스탠자에서 이 동작을 구성할 수 있습니다.
EUS에서 EUS로의 업데이트 수행에 대해 자세히 알아보십시오.
6.1.3. EUS에서 EUS로 업데이트 중 워크로드 업데이트 방지
하나의 EUS (Extended Update Support) 버전에서 다음으로 업데이트되는 경우 OpenShift Virtualization이 업데이트 프로세스 중에 워크로드를 마이그레이션하거나 제거하지 못하도록 자동 워크로드 업데이트를 수동으로 비활성화해야 합니다.
사전 요구 사항
- OpenShift Container Platform의 EUS 버전을 실행 중이며 다음 EUS 버전으로 업데이트하려고 합니다. 둘 사이의 홀수 버전으로 아직 업데이트되지 않았습니다.
- "EUS에서 EUS로의 업데이트를 수행하기 위한 준비"를 읽고 OpenShift Container Platform 클러스터와 관련된 경고 및 요구 사항을 알아봅니다.
- OpenShift Container Platform 설명서에서 지시한 대로 작업자 노드의 머신 구성 풀을 일시 중지했습니다.
- 기본 자동 승인 전략을 사용하는 것이 좋습니다. 수동 승인 전략을 사용하는 경우 웹 콘솔에서 보류 중인 모든 업데이트를 승인해야 합니다. 자세한 내용은 "수동 보류 중인 Operator 업데이트" 섹션을 참조하십시오.
프로세스
다음 명령을 실행하여 현재
workloadUpdateMethods
구성을 백업합니다.$ WORKLOAD_UPDATE_METHODS=$(oc get kv kubevirt-kubevirt-hyperconverged \ -n openshift-cnv -o jsonpath='{.spec.workloadUpdateStrategy.workloadUpdateMethods}')
다음 명령을 실행하여 모든 워크로드 업데이트 방법을 끕니다.
$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op":"replace","path":"/spec/workloadUpdateStrategy/workloadUpdateMethods", "value":[]}]'
출력 예
hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patched
계속하기 전에
HyperConverged
Operator를업그레이드할
수 있는지 확인합니다. 다음 명령을 입력하고 출력을 모니터링합니다.$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.conditions"
예 6.1. 출력 예
[ { "lastTransitionTime": "2022-12-09T16:29:11Z", "message": "Reconcile completed successfully", "observedGeneration": 3, "reason": "ReconcileCompleted", "status": "True", "type": "ReconcileComplete" }, { "lastTransitionTime": "2022-12-09T20:30:10Z", "message": "Reconcile completed successfully", "observedGeneration": 3, "reason": "ReconcileCompleted", "status": "True", "type": "Available" }, { "lastTransitionTime": "2022-12-09T20:30:10Z", "message": "Reconcile completed successfully", "observedGeneration": 3, "reason": "ReconcileCompleted", "status": "False", "type": "Progressing" }, { "lastTransitionTime": "2022-12-09T16:39:11Z", "message": "Reconcile completed successfully", "observedGeneration": 3, "reason": "ReconcileCompleted", "status": "False", "type": "Degraded" }, { "lastTransitionTime": "2022-12-09T20:30:10Z", "message": "Reconcile completed successfully", "observedGeneration": 3, "reason": "ReconcileCompleted", "status": "True", "type": "Upgradeable" 1 } ]
- 1
- OpenShift Virtualization Operator에는
Upgradeable
상태가 있습니다.
소스 EUS 버전에서 OpenShift Container Platform의 다음 마이너 버전으로 클러스터를 수동으로 업데이트합니다.
$ oc adm upgrade
검증
다음 명령을 실행하여 현재 버전을 확인합니다.
$ oc get clusterversion
참고OpenShift Container Platform을 다음 버전으로 업데이트하는 것은 OpenShift Virtualization을 업데이트하기 위한 사전 요구 사항입니다. 자세한 내용은 OpenShift Container Platform 설명서의 "클러스터 업그레이드" 섹션을 참조하십시오.
OpenShift Virtualization을 업데이트합니다.
- 기본 자동 승인 전략을 사용하면 OpenShift Container Platform을 업데이트한 후 OpenShift Virtualization이 해당 버전으로 자동으로 업데이트됩니다.
- 수동 승인 전략을 사용하는 경우 웹 콘솔을 사용하여 보류 중인 업데이트를 승인합니다.
다음 명령을 실행하여 OpenShift Virtualization 업데이트를 모니터링합니다.
$ oc get csv -n openshift-cnv
- OpenShift Virtualization을 EUS 마이너 버전이 아닌 모든 z-stream 버전으로 업데이트하고 이전 단계에 표시된 명령을 실행하여 각 업데이트를 모니터링합니다.
다음 명령을 실행하여 OpenShift Virtualization이 EUS가 아닌 버전의 최신 z-stream 릴리스로 성공적으로 업데이트되었는지 확인합니다.
$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.versions"
출력 예
[ { "name": "operator", "version": "4.16.0" } ]
다음 업데이트를 수행하기 전에
HyperConverged
Operator가Upgradeable
상태가 될 때까지 기다립니다. 다음 명령을 입력하고 출력을 모니터링합니다.$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o json | jq ".status.conditions"
- OpenShift Container Platform을 대상 EUS 버전으로 업데이트합니다.
클러스터 버전을 확인하여 업데이트가 성공했는지 확인합니다.
$ oc get clusterversion
OpenShift Virtualization을 대상 EUS 버전으로 업데이트합니다.
- 기본 자동 승인 전략을 사용하면 OpenShift Container Platform을 업데이트한 후 OpenShift Virtualization이 해당 버전으로 자동으로 업데이트됩니다.
- 수동 승인 전략을 사용하는 경우 웹 콘솔을 사용하여 보류 중인 업데이트를 승인합니다.
다음 명령을 실행하여 OpenShift Virtualization 업데이트를 모니터링합니다.
$ oc get csv -n openshift-cnv
VERSION
필드가 대상 EUS 버전과 일치하고PHASE
필드가Succeeded
인 경우 업데이트가 완료됩니다.백업한 워크로드 업데이트 방법 구성을 복원합니다.
$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv --type json -p \ "[{\"op\":\"add\",\"path\":\"/spec/workloadUpdateStrategy/workloadUpdateMethods\", \"value\":$WORKLOAD_UPDATE_METHODS}]"
출력 예
hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patched
검증
다음 명령을 실행하여 VM 마이그레이션의 상태를 확인합니다.
$ oc get vmim -A
다음 단계
- 이제 작업자 노드의 머신 구성 풀 일시 중지를 해제할 수 있습니다.
6.1.4. 워크로드 업데이트 방법 구성
HyperConverged
CR(사용자 정의 리소스)을 편집하여 워크로드 업데이트 방법을 구성할 수 있습니다.
사전 요구 사항
실시간 마이그레이션을 업데이트 방법으로 사용하려면 먼저 클러스터에서 실시간 마이그레이션을 활성화해야 합니다.
참고VirtualMachineInstance
CR에evictionStrategy: LiveMigrate
가 포함되어 있고 VMI(가상 머신 인스턴스)가 실시간 마이그레이션을 지원하지 않는 경우 VMI가 업데이트되지 않습니다.
프로세스
기본 편집기에서
HyperConverged
CR을 열려면 다음 명령을 실행합니다.$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
HyperConverged
CR의workloadUpdateStrategy
스탠자를 편집합니다. 예를 들면 다음과 같습니다.apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: workloadUpdateStrategy: workloadUpdateMethods: 1 - LiveMigrate 2 - Evict 3 batchEvictionSize: 10 4 batchEvictionInterval: "1m0s" 5 # ...
- 1
- 자동화된 워크로드 업데이트를 수행하는 데 사용할 수 있는 방법입니다. 사용 가능한 값은
LiveMigrate
및Evict
입니다. 이 예에 표시된 대로 두 옵션을 모두 활성화하면 업데이트에서 실시간 마이그레이션을 지원하지 않는 VMI에 실시간 마이그레이션 및Evict
를 지원하는 VMI에LiveMigrate
를 사용합니다. 자동 워크로드 업데이트를 비활성화하려면workloadUpdateStrategy
스탠자를 제거하거나workloadUpdateMethods: []
를 설정하여 배열을 비워 둘 수 있습니다. - 2
- 중단이 적은 업데이트 방법입니다. VMI(가상 머신) 게스트를 업데이트된 구성 요소가 활성화된 새 Pod로 마이그레이션하여 실시간 마이그레이션을 지원하는 VMI가 업데이트됩니다.
LiveMigrate
가 나열된 유일한 워크로드 업데이트 방법인 경우 실시간 마이그레이션을 지원하지 않는 VMI는 중단되거나 업데이트되지 않습니다. - 3
- 업그레이드 중 VMI Pod를 종료하는 중단 방법입니다.
Evict
는 클러스터에서 실시간 마이그레이션이 활성화되지 않은 경우 사용 가능한 유일한 업데이트 방법입니다.runStrategy: Always
가 구성된VirtualMachine
오브젝트에서 VMI를 제어하는 경우 업데이트된 구성 요소가 있는 새 VMI가 새 Pod에 생성됩니다. - 4
Evict
방법을 사용하여 한 번에 강제로 업데이트할 수 있는 VMI 수입니다. 이는LiveMigrate
방법에는 적용되지 않습니다.- 5
- 다음 워크로드 배치를 제거하기 전에 대기하는 간격입니다. 이는
LiveMigrate
방법에는 적용되지 않습니다.
참고HyperConverged
CR의spec.liveMigrationConfig
스탠자를 편집하여 실시간 마이그레이션 제한 및 타임아웃을 구성할 수 있습니다.- 변경 사항을 적용하려면 편집기를 저장하고 종료합니다.
6.1.5. 보류 중인 Operator 업데이트 승인
6.1.5.1. 보류 중인 Operator 업데이트 수동 승인
설치된 Operator의 서브스크립션에 있는 승인 전략이 수동으로 설정된 경우 새 업데이트가 현재 업데이트 채널에 릴리스될 때 업데이트를 수동으로 승인해야 설치가 시작됩니다.
사전 요구 사항
- OLM(Operator Lifecycle Manager)을 사용하여 이전에 설치한 Operator입니다.
절차
-
OpenShift Container Platform 웹 콘솔의 관리자 관점에서 Operator
설치된 Operator로 이동합니다. - 보류 중인 업데이트가 있는 Operator에 업그레이드 사용 가능 상태가 표시됩니다. 업데이트할 Operator 이름을 클릭합니다.
- 서브스크립션 탭을 클릭합니다. 승인이 필요한 업데이트는 업그레이드 상태 옆에 표시됩니다. 예를 들어 1 승인 필요가 표시될 수 있습니다.
- 1 승인 필요를 클릭한 다음 설치 계획 프리뷰를 클릭합니다.
- 업데이트에 사용 가능한 것으로 나열된 리소스를 검토합니다. 문제가 없는 경우 승인을 클릭합니다.
-
Operator
설치된 Operator 페이지로 이동하여 업데이트 진행 상황을 모니터링합니다. 완료되면 상태가 성공 및 최신으로 변경됩니다.
6.1.6. 업데이트 상태 모니터링
6.1.6.1. OpenShift Virtualization 업그레이드 상태 모니터링
OpenShift Virtualization Operator 업그레이드 상태를 모니터링하려면 CSV(클러스터 서비스 버전) PHASE
를 확인합니다. 웹 콘솔에서 또는 여기에 제공된 명령을 실행하여 CSV 조건을 모니터링할 수도 있습니다.
PHASE
및 조건 값은 사용 가능한 정보를 기반으로 한 근사치입니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 로그인합니다. -
OpenShift CLI(
oc
)를 설치합니다.
절차
다음 명령을 실행합니다.
$ oc get csv -n openshift-cnv
PHASE
필드를 확인하여 출력을 검토합니다. 예를 들면 다음과 같습니다.출력 예
VERSION REPLACES PHASE 4.9.0 kubevirt-hyperconverged-operator.v4.8.2 Installing 4.9.0 kubevirt-hyperconverged-operator.v4.9.0 Replacing
선택 사항: 다음 명령을 실행하여 모든 OpenShift Virtualization 구성 요소 조건을 집계한 상태를 모니터링합니다.
$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv \ -o=jsonpath='{range .status.conditions[*]}{.type}{"\t"}{.status}{"\t"}{.message}{"\n"}{end}'
업그레이드가 완료되면 다음과 같은 결과가 나타납니다.
출력 예
ReconcileComplete True Reconcile completed successfully Available True Reconcile completed successfully Progressing False Reconcile completed successfully Degraded False Reconcile completed successfully Upgradeable True Reconcile completed successfully
6.1.6.2. 오래된 OpenShift Virtualization 워크로드 보기
CLI를 사용하여 오래된 워크로드 목록을 볼 수 있습니다.
클러스터에 오래된 가상화 Pod가 있는 경우 OutdatedVirtualMachineInstanceWorkloads
경고가 실행됩니다.
절차
오래된 VMI(가상 머신 인스턴스) 목록을 보려면 다음 명령을 실행합니다.
$ oc get vmi -l kubevirt.io/outdatedLauncherImage --all-namespaces
VMI가 자동으로 업데이트되도록 워크로드 업데이트를 구성합니다.