10.19. 가상 머신 디스크
10.19.1. 가상 머신 로컬 스토리지 구성 링크 복사링크가 클립보드에 복사되었습니다!
HPP(hostpath provisioner)를 사용하여 가상 머신의 로컬 스토리지를 구성할 수 있습니다.
OpenShift Virtualization Operator를 설치하면 HPP(Hostpath Provisioner) Operator가 자동으로 설치됩니다. HPP는 Hostpath Provisioner Operator가 생성한 OpenShift Virtualization용으로 설계된 로컬 스토리지 프로비전 프로그램입니다. HPP를 사용하려면 HPP 사용자 정의 리소스(CR)를 생성해야 합니다.
10.19.1.1. 기본 스토리지 풀을 사용하여 hostpath 프로비전 프로그램 생성 링크 복사링크가 클립보드에 복사되었습니다!
storagePools 스탠자를 사용하여 HPP CR(사용자 정의 리소스)을 생성하여 기본 스토리지 풀로 hostpath 프로비전 프로그램(HPP)을 구성합니다. 스토리지 풀은 CSI 드라이버에서 사용하는 이름과 경로를 지정합니다.
사전 요구 사항
-
spec.storagePools.path에 지정된 디렉터리에는 읽기/쓰기 액세스 권한이 있어야 합니다. - 스토리지 풀은 운영 체제와 동일한 파티션에 있을 수 없습니다. 그렇지 않으면 운영 체제 파티션이 용량으로 채워질 수 있으며 이로 인해 성능에 영향을 주거나 노드가 불안정하거나 사용할 수 없게 됩니다.
절차
다음 예와 같이
storagePools스탠자를 사용하여hpp_cr.yaml파일을 생성합니다.apiVersion: hostpathprovisioner.kubevirt.io/v1beta1 kind: HostPathProvisioner metadata: name: hostpath-provisioner spec: imagePullPolicy: IfNotPresent storagePools:1 - name: any_name path: "/var/myvolumes"2 workload: nodeSelector: kubernetes.io/os: linux- 파일을 저장하고 종료합니다.
다음 명령을 실행하여 HPP를 생성합니다.
$ oc create -f hpp_cr.yaml
10.19.1.1.1. 스토리지 클래스 생성 정보 링크 복사링크가 클립보드에 복사되었습니다!
스토리지 클래스를 생성할 때 해당 스토리지 클래스에 속하는 PV(영구 볼륨)의 동적 프로비저닝에 영향을 주는 매개변수를 설정합니다. StorageClass 오브젝트를 생성한 후에는 이 오브젝트의 매개변수를 업데이트할 수 없습니다.
HPP(hostpath provisioner)를 사용하려면 storagePools 스탠자를 사용하여 CSI 드라이버에 대한 관련 스토리지 클래스를 생성해야 합니다.
가상 머신은 로컬 PV를 기반으로 하는 데이터 볼륨을 사용합니다. 로컬 PV는 특정 노드에 바인딩됩니다. 디스크 이미지는 가상 머신에서 사용할 수 있는 반면 가상 머신은 이전에 로컬 스토리지 PV가 고정된 노드에 예약할 수 없습니다.
이 문제를 해결하려면 Kubernetes Pod 스케줄러를 사용하여 올바른 노드의 PV에 PVC(영구 볼륨 클레임)를 바인딩합니다. volumeBindingMode 매개변수가 WaitForFirstConsumer 로 설정된 StorageClass 값을 사용하면 PVC를 사용하여 Pod를 생성할 때까지 PV의 바인딩 및 프로비저닝이 지연됩니다.
10.19.1.1.2. storagePools 스탠자를 사용하여 CSI 드라이버의 스토리지 클래스 생성 링크 복사링크가 클립보드에 복사되었습니다!
hostpath 프로비전 프로그램(HPP) CSI 드라이버에 대한 스토리지 클래스 CR(사용자 정의 리소스)을 생성합니다.
절차
storageclass_csi.yaml파일을 생성하여 스토리지 클래스를 정의합니다.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: hostpath-csi provisioner: kubevirt.io.hostpath-provisioner reclaimPolicy: Delete1 volumeBindingMode: WaitForFirstConsumer2 parameters: storagePool: my-storage-pool3
- 1
reclaimPolicy에 사용할 수 있는 값은Delete및Retain두 가지입니다. 값을 지정하지 않으면 기본값은Delete입니다.- 2
volumeBindingMode매개변수는 동적 프로비저닝 및 볼륨 바인딩이 발생하는 시기를 결정합니다. PVC(영구 볼륨 클레임)를 사용하는 Pod가 생성된 후 PV(영구 볼륨)의 바인딩 및 프로비저닝을 지연하려면WaitForFirstConsumer를 지정합니다. 이렇게 하면 PV에서 Pod의 스케줄링 요구 사항을 충족할 수 있습니다.- 3
- HPP CR에 정의된 스토리지 풀의 이름을 지정합니다.
- 파일을 저장하고 종료합니다.
다음 명령을 실행하여
StorageClass오브젝트를 만듭니다.$ oc create -f storageclass_csi.yaml
10.19.1.2. PVC 템플릿으로 생성된 스토리지 풀 정보 링크 복사링크가 클립보드에 복사되었습니다!
단일 대규모 PV(영구 볼륨)가 있는 경우HPP(사용자 정의 리소스) CR(사용자 정의 리소스)에서 PVC 템플릿을 정의하여 스토리지 풀을 생성할 수 있습니다.
PVC 템플릿으로 생성된 스토리지 풀에는 여러 HPP 볼륨이 포함될 수 있습니다. PV를 더 작은 볼륨으로 분할하면 데이터 할당에 대한 유연성이 향상됩니다.
PVC 템플릿은 PersistentVolumeClaim 오브젝트의 spec 스탠자를 기반으로 합니다.
PersistentVolumeClaim 오브젝트의 예
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: iso-pvc
spec:
volumeMode: Block
storageClassName: my-storage-class
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
- 1
- 이 값은 블록 볼륨 모드 PV에만 필요합니다.
HPP CR에서 pvcTemplate 사양을 사용하여 스토리지 풀을 정의합니다. Operator는 HPP CSI 드라이버가 포함된 각 노드의 pvcTemplate 사양에서 PVC를 생성합니다. PVC 템플릿에서 생성된 PVC는 단일 대규모 PV를 사용하므로 HPP에서 더 작은 동적 볼륨을 생성할 수 있습니다.
기본 스토리지 풀을 PVC 템플릿에서 생성된 스토리지 풀과 결합할 수 있습니다.
10.19.1.2.1. PVC 템플릿을 사용하여 스토리지 풀 생성 링크 복사링크가 클립보드에 복사되었습니다!
HPP CR(사용자 정의 리소스)에 PVC 템플릿을 지정하여 여러 hostspath 프로비전 프로그램(HPP) 볼륨에 대한 스토리지 풀을 생성할 수 있습니다.
사전 요구 사항
-
spec.storagePools.path에 지정된 디렉터리에는 읽기/쓰기 액세스 권한이 있어야 합니다. - 스토리지 풀은 운영 체제와 동일한 파티션에 있을 수 없습니다. 그렇지 않으면 운영 체제 파티션이 용량으로 채워질 수 있으며 이로 인해 성능에 영향을 주거나 노드가 불안정하거나 사용할 수 없게 됩니다.
절차
다음 예에 따라
storagePools스탠자에서 PVC(영구 볼륨) 템플릿을 지정하는 HPP CR에hpp_pvc_template_pool.yaml파일을 생성합니다.apiVersion: hostpathprovisioner.kubevirt.io/v1beta1 kind: HostPathProvisioner metadata: name: hostpath-provisioner spec: imagePullPolicy: IfNotPresent storagePools:1 - name: my-storage-pool path: "/var/myvolumes"2 pvcTemplate: volumeMode: Block3 storageClassName: my-storage-class4 accessModes: - ReadWriteOnce resources: requests: storage: 5Gi5 workload: nodeSelector: kubernetes.io/os: linux- 1
storagePools스탠자는 기본 및 PVC 템플릿 스토리지 풀을 모두 포함할 수 있는 배열입니다.- 2
- 이 노드 경로에 스토리지 풀 디렉터리를 지정합니다.
- 3
- 선택 사항:
volumeMode매개변수는 프로비저닝된 볼륨 형식과 일치하는 경우Block또는Filesystem일 수 있습니다. 값을 지정하지 않으면 기본값은Filesystem입니다.volumeMode가Block인 경우 마운트 Pod는 마운트하기 전에 블록 볼륨에 XFS 파일 시스템을 생성합니다. - 4
storageClassName매개변수를 생략하면 기본 스토리지 클래스가 PVC를 생성하는 데 사용됩니다.storageClassName을 생략하는 경우 HPP 스토리지 클래스가 기본 스토리지 클래스가 아닌지 확인합니다.- 5
- 정적 또는 동적으로 프로비저닝된 스토리지를 지정할 수 있습니다. 두 경우 모두 요청된 스토리지 크기가 사실상 분할하려는 볼륨에 적합한지 확인하거나 PVC를 큰 PV에 바인딩할 수 없습니다. 사용 중인 스토리지 클래스에서 동적으로 프로비저닝된 스토리지를 사용하는 경우 일반적인 요청의 크기와 일치하는 할당 크기를 선택합니다.
- 파일을 저장하고 종료합니다.
다음 명령을 실행하여 스토리지 풀로 HPP를 생성합니다.
$ oc create -f hpp_pvc_template_pool.yaml