9.3. 자동 부팅 소스 업데이트 관리
다음 부팅 소스에 대한 자동 업데이트를 관리할 수 있습니다.
부팅 소스를 사용하면 VM(가상 머신)을 더 쉽게 쉽게 생성할 수 있습니다. 자동 부팅 소스 업데이트가 활성화되면 CDI(Containerized Data Importer)가 이미지를 가져오고, 폴링하고, 업데이트하여 새 VM에 대해 복제할 수 있도록 합니다. 기본적으로 CDI는 Red Hat 부팅 소스를 자동으로 업데이트합니다.
9.3.1. Red Hat 부팅 소스 업데이트 관리
enableCommonBootImageImport
기능 게이트를 비활성화하여 모든 시스템 정의 부팅 소스에 대한 자동 업데이트를 비활성화할 수 있습니다. 이 기능 게이트를 비활성화하면 모든 DataImportCron
오브젝트가 삭제됩니다. 관리자가 수동으로 삭제할 수 있지만 운영 체제 이미지를 저장하는 이전에 가져온 부팅 소스 오브젝트는 제거되지 않습니다.
enableCommonBootImageImport
기능 게이트를 비활성화하면 DataSource
오브젝트가 재설정되어 더 이상 원래 부팅 소스를 가리키지 않습니다. 관리자는 DataSource
오브젝트에 대한 새 PVC(영구 볼륨 클레임) 또는 볼륨 스냅샷을 생성한 다음 운영 체제 이미지로 채워 부팅 소스를 수동으로 제공할 수 있습니다.
9.3.1.1. 모든 시스템 정의 부팅 소스에 대한 자동 업데이트 관리
자동 부팅 소스 가져오기 및 업데이트를 비활성화하면 리소스 사용량을 줄일 수 있습니다. 연결이 끊긴 환경에서 자동 부팅 소스 업데이트를 비활성화하면 CDIDataImportCronOutdated
경고가 로그를 채울 수 없습니다.
모든 시스템 정의 부팅 소스에 대한 자동 업데이트를 비활성화하려면 값을 false
로 설정하여 enableCommonBootImageImport
기능 게이트를 끕니다. 이 값을 true
로 설정하면 기능 게이트가 다시 활성화되고 자동 업데이트가 다시 설정됩니다.
사용자 지정 부팅 소스는 이 설정의 영향을 받지 않습니다.
프로세스
HyperConverged
CR(사용자 정의 리소스)을 편집하여 자동 부팅 소스 업데이트 기능 게이트를 전환합니다.자동 부팅 소스 업데이트를 비활성화하려면
HyperConverged
CR의spec.featureGates.enableCommonBootImageImport
필드를false
로 설정합니다. 예를 들면 다음과 같습니다.$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": \ "/spec/featureGates/enableCommonBootImageImport", \ "value": false}]'
자동 부팅 소스 업데이트를 다시 활성화하려면
HyperConverged
CR의spec.featureGates.enableCommonBootImageImport
필드를true
로 설정합니다. 예를 들면 다음과 같습니다.$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": \ "/spec/featureGates/enableCommonBootImageImport", \ "value": true}]'
9.3.2. 사용자 정의 부팅 소스 업데이트 관리
OpenShift Virtualization에서 제공하지 않는 사용자 정의 부팅 소스는 기능 게이트에서 제어하지 않습니다. HyperConverged
CR(사용자 정의 리소스)을 편집하여 개별적으로 관리해야 합니다.
스토리지 클래스를 구성해야 합니다. 그렇지 않으면 클러스터에서 사용자 정의 부팅 소스에 대한 자동 업데이트를 수신할 수 없습니다. 자세한 내용은 스토리지 클래스 정의를 참조하십시오.
9.3.2.1. 사용자 정의 부팅 소스 업데이트를 위한 스토리지 클래스 구성
HyperConverged
CR(사용자 정의 리소스)을 편집하여 기본 스토리지 클래스를 덮어쓸 수 있습니다.
부팅 소스는 기본 스토리지 클래스를 사용하여 스토리지에서 생성됩니다. 클러스터에 기본 스토리지 클래스가 없는 경우 사용자 정의 부팅 소스에 대한 자동 업데이트를 구성하기 전에 하나를 정의해야 합니다.
프로세스
다음 명령을 실행하여 기본 편집기에서
HyperConverged
CR을 엽니다.$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
storageClassName
필드에 값을 입력하여 새 스토리지 클래스를 정의합니다.apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: name: rhel8-image-cron spec: template: spec: storageClassName: <new_storage_class> 1 schedule: "0 */12 * * *" 2 managedDataSource: <data_source> 3 # ...
For the custom image to be detected as an available boot source, the value of the `spec.dataVolumeTemplates.spec.sourceRef.name` parameter in the VM template must match this value.
현재 기본 스토리지 클래스에서
storageclass.kubernetes.io/is-default-class
주석을 제거합니다.다음 명령을 실행하여 현재 기본 스토리지 클래스의 이름을 검색합니다.
$ oc get storageclass
출력 예
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE csi-manila-ceph manila.csi.openstack.org Delete Immediate false 11d hostpath-csi-basic (default) kubevirt.io.hostpath-provisioner Delete WaitForFirstConsumer false 11d 1
- 1
- 이 예에서 현재 기본 스토리지 클래스의 이름은
hostpath-csi-basic
입니다.
다음 명령을 실행하여 현재 기본 스토리지 클래스에서 주석을 제거합니다.
$ oc patch storageclass <current_default_storage_class> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}' 1
- 1
- &
lt;current_default_storage_class
>를 기본 스토리지 클래스의storageClassName
값으로 바꿉니다.
다음 명령을 실행하여 새 스토리지 클래스를 기본값으로 설정합니다.
$ oc patch storageclass <new_storage_class> -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' 1
- 1
- &
lt;new_storage_class
>를HyperConverged
CR에 추가한storageClassName
값으로 바꿉니다.
9.3.2.2. 사용자 정의 부팅 소스에 대한 자동 업데이트 활성화
OpenShift Virtualization은 기본적으로 시스템 정의 부팅 소스를 자동으로 업데이트하지만 사용자 정의 부팅 소스를 자동으로 업데이트하지는 않습니다. HyperConverged
CR(사용자 정의 리소스)을 편집하여 자동 업데이트를 수동으로 활성화해야 합니다.
사전 요구 사항
- 클러스터에는 기본 스토리지 클래스가 있습니다.
프로세스
다음 명령을 실행하여 기본 편집기에서
HyperConverged
CR을 엽니다.$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
HyperConverged
CR을 편집하여dataImportCronTemplates
섹션에 적절한 템플릿 및 부팅 소스를 추가합니다. 예를 들면 다음과 같습니다.사용자 정의 리소스의 예
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 캐시를 기반으로 하는
노드
pullMethod
가 아닌 기본Pod
pullMethod
를 사용합니다.노드
Docker 캐시는Container.Image
를 통해 레지스트리 이미지를 사용할 수 있지만 CDI 가져오기는 액세스할 수 없는 경우 유용합니다. - 4
- 사용자 지정 이미지가 사용 가능한 부팅 소스로 감지되려면 이미지의
managedDataSource
이름이 VM 템플릿 YAML 파일의spec.dataVolumeTemplates.spec.sourceRef.name
에 있는 템플릿의DataSource
이름과 일치해야 합니다. - 5
- cron 작업이 삭제될 때
모두
데이터 볼륨 및 데이터 소스를 유지합니다. cron 작업이 삭제될 때 데이터 볼륨 및 데이터 소스를 삭제하려면None
을 사용합니다.
- 파일을 저장합니다.
9.3.2.3. 볼륨 스냅샷 부팅 소스 활성화
운영 체제 기본 이미지를 저장하는 스토리지 클래스와 연결된 StorageProfile
의 매개변수를 설정하여 볼륨 스냅샷 부팅 소스를 활성화합니다. DataImportCron
은 원래 PVC 소스만 유지하도록 설계되었지만 VolumeSnapshot
소스는 특정 스토리지 유형의 PVC 소스보다 더 잘 확장됩니다.
단일 스냅샷에서 복제할 때 더 잘 확장하려면 검증된 스토리지 프로필에서 볼륨 스냅샷을 사용합니다.
사전 요구 사항
- 운영 체제 이미지를 사용하여 볼륨 스냅샷에 액세스할 수 있어야 합니다.
- 스토리지에서 스냅샷을 지원해야 합니다.
프로세스
다음 명령을 실행하여 부팅 소스를 프로비저닝하는 데 사용되는 스토리지 클래스에 해당하는 스토리지 프로필 오브젝트를 엽니다.
$ oc edit storageprofile <storage_class>
-
StorageProfile
의dataImportCronSourceFormat
사양을 검토하여 VM이 기본적으로 PVC 또는 볼륨 스냅샷을 사용 중인지 확인합니다. dataImportCronSourceFormat
사양을스냅샷
으로 업데이트하여 필요한 경우 스토리지 프로필을 편집합니다.스토리지 프로필 예
apiVersion: cdi.kubevirt.io/v1beta1 kind: StorageProfile metadata: # ... spec: dataImportCronSourceFormat: snapshot
검증
부팅 소스를 프로비저닝하는 데 사용되는 스토리지 클래스에 해당하는 스토리지 프로필 오브젝트를 엽니다.
$ oc get storageprofile <storage_class> -oyaml
-
StorageProfile
의dataImportCronSourceFormat
사양이 'snapshot'으로 설정되어 있고DataImportCron
이 가리키는 모든DataSource
오브젝트가 볼륨 스냅샷을 참조하는지 확인합니다.
이제 이러한 부팅 소스를 사용하여 가상 머신을 생성할 수 있습니다.
9.3.3. 단일 부팅 소스에 대한 자동 업데이트 비활성화
HyperConverged
CR(사용자 정의 리소스)을 편집하여 사용자 정의 또는 시스템 정의 여부에 관계없이 개별 부팅 소스에 대한 자동 업데이트를 비활성화할 수 있습니다.
프로세스
다음 명령을 실행하여 기본 편집기에서
HyperConverged
CR을 엽니다.$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
spec.dataImportCronTemplates
필드를 편집하여 개별 부팅 소스에 대한 자동 업데이트를 비활성화합니다.- 사용자 정의 부팅 소스
-
spec.dataImportCronTemplates
필드에서 부팅 소스를 제거합니다. 자동 업데이트는 기본적으로 사용자 정의 부팅 소스에 대해 비활성화됩니다.
-
- 시스템 정의 부팅 소스
spec.dataImportCronTemplates
에 부팅 소스를 추가합니다.참고자동 업데이트는 시스템 정의 부팅 소스에 대해 기본적으로 활성화되지만 추가하지 않는 한 이러한 부팅 소스는 CR에 나열되지 않습니다.
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 # ...
- 파일을 저장합니다.
9.3.4. 부팅 소스 상태 확인
HyperConverged
CR(사용자 정의 리소스)을 확인하여 부팅 소스가 시스템 정의 또는 사용자 정의인지 확인할 수 있습니다.
프로세스
다음 명령을 실행하여
HyperConverged
CR의 콘텐츠를 확인합니다.$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o yaml
출력 예
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: # ... status: # ... dataImportCronTemplates: - 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 1 # ... - 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: {} 2 # ...
status.dataImportCronTemplates.status
필드를 검토하여 부팅 소스의 상태를 확인합니다.-
필드에
commonTemplate: true
가 포함된 경우 시스템 정의 부팅 소스입니다. -
status.dataImportCronTemplates.status
필드에{}
값이 있는 경우 사용자 지정 부팅 소스입니다.
-
필드에