7.18.8. 로컬 가상 머신 디스크를 다른 노드로 이동

로컬 볼륨 스토리지를 사용하는 가상 머신을 특정 노드에서 실행하도록 이동할 수 있습니다.

다음과 같은 이유로 가상 머신을 특정 노드로 이동할 수 있습니다.

  • 현재 노드에서는 로컬 스토리지 구성을 제한합니다.
  • 새 노드가 해당 가상 머신의 워크로드에 더 최적화되어 있습니다.

로컬 스토리지를 사용하는 가상 머신을 이동하려면 데이터 볼륨을 사용하여 기본 볼륨을 복제해야 합니다. 복제 작업이 완료되면 새 데이터 볼륨을 사용하도록 가상 머신 구성을 편집하거나 새 데이터 볼륨을 다른 가상 머신에 추가할 수 있습니다.

참고

cluster-admin 역할이 없는 사용자는 다른 네임스페이스에 볼륨을 복제하려면 추가 사용자 권한이 있어야 합니다.

7.18.8.1. 다른 노드에 로컬 볼륨 복제

가상 머신 디스크를 특정 노드에서 실행하기 위해 기본 PVC(영구 볼륨 클레임)를 복제하여 가상 머신 디스크를 이동할 수 있습니다.

가상 머신 디스크가 올바른 노드에 복제되었는지 확인하려면 새 PV(영구 볼륨)를 생성하거나 올바른 노드에서 가상 머신 디스크를 확인합니다. 데이터 볼륨에서 참조할 수 있도록 PV에 고유한 라벨을 적용하십시오.

참고

대상 PV는 소스 PVC와 크기가 같거나 커야 합니다. 대상 PV가 소스 PVC보다 작으면 복제 작업이 실패합니다.

사전 요구 사항

  • 가상 머신이 실행되고 있지 않아야 합니다. 가상 머신 디스크를 복제하기 전에 가상 머신의 전원을 끄십시오.

절차

  1. 노드에 새 로컬 PV를 생성하거나 노드의 기존 로컬 PV를 확인합니다.

    • nodeAffinity.nodeSelectorTerms 매개변수를 포함하는 로컬 PV를 생성합니다. 다음 매니페스트에서는 node0110Gi 로컬 PV를 생성합니다.

      kind: PersistentVolume
      apiVersion: v1
      metadata:
        name: <destination-pv> 1
        annotations:
      spec:
        accessModes:
        - ReadWriteOnce
        capacity:
          storage: 10Gi 2
        local:
          path: /mnt/local-storage/local/disk1 3
        nodeAffinity:
          required:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/hostname
                operator: In
                values:
                - node01 4
        persistentVolumeReclaimPolicy: Delete
        storageClassName: local
        volumeMode: Filesystem
      1
      PV의 이름입니다.
      2
      PV의 크기입니다. 충분한 공간을 할당해야 합니다. 그러지 않으면 복제 작업이 실패합니다. 크기는 소스 PVC와 같거나 커야 합니다.
      3
      노드의 마운트 경로입니다.
      4
      PV를 생성하려는 노드의 이름입니다.
    • 대상 노드에 이미 존재하는 PV를 확인합니다. 구성에서 nodeAffinity 필드를 확인하여 PV가 프로비저닝되는 노드를 확인할 수 있습니다.

      $ oc get pv <destination-pv> -o yaml

      다음 스니펫은 PV가 node01에 있음을 보여줍니다.

      출력 예

      ...
      spec:
        nodeAffinity:
          required:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/hostname 1
                operator: In
                values:
                - node01 2
      ...

      1
      kubernetes.io/hostname 키는 노드 호스트 이름을 사용하여 노드를 선택합니다.
      2
      노드의 호스트 이름입니다.
  2. PV에 고유한 라벨을 추가합니다.

    $ oc label pv <destination-pv> node=node01
  3. 다음을 참조하는 데이터 볼륨 매니페스트를 생성합니다.

    • 가상 머신의 PVC 이름 및 네임스페이스
    • 이전 단계에서 PV에 적용한 라벨
    • 대상 PV의 크기

      apiVersion: cdi.kubevirt.io/v1beta1
      kind: DataVolume
      metadata:
        name: <clone-datavolume> 1
      spec:
        source:
          pvc:
            name: "<source-vm-disk>" 2
            namespace: "<source-namespace>" 3
        pvc:
          accessModes:
            - ReadWriteOnce
          selector:
            matchLabels:
              node: node01 4
          resources:
            requests:
              storage: <10Gi> 5
      1
      새 데이터 볼륨의 이름입니다.
      2
      소스 PVC의 이름입니다. PVC 이름을 모르는 경우 가상 머신 구성의 spec.volumes.persistentVolumeClaim.claimName에서 확인할 수 있습니다.
      3
      소스 PVC가 존재하는 네임스페이스입니다.
      4
      이전 단계에서 PV에 적용한 라벨입니다.
      5
      대상 PV의 크기
  4. 클러스터에 데이터 볼륨 매니페스트를 적용하여 복제 작업을 시작합니다.

    $ oc apply -f <clone-datavolume.yaml>

데이터 볼륨은 가상 머신의 PVC를 특정 노드의 PV에 복제합니다.