여러 리더가 있는 영구 디스크 사용


이 페이지에서는 ReadOnlyMany 액세스 모드를 사용하여 클러스터에 영구 디스크를 추가하는 방법을 설명합니다. 이 모드를 사용하면 다양한 노드의 여러 포드에서 읽을 수 있도록 디스크를 마운트할 수 있습니다.

이 모드에 대한 자세한 내용은 영구 볼륨 액세스 모드를 참조하세요.

요구사항

소스 영구 디스크 포맷 및 채우기

읽기 전용 모드에서 영구 디스크를 사용하려면 소스 영구 디스크에 데이터를 채운 다음 볼륨을 클론하거나 볼륨 스냅샷을 사용하여 데이터를 새 ReadOnlyMany PersistentVolume으로 이동해야 합니다.

  1. 기존 영구 디스크 또는 동적 프로비저닝을 사용하여 PersistentVolume을 만듭니다.

  2. 디스크를 포맷하고 디스크에 데이터를 채웁니다. 디스크를 포맷하려면 포드에서 디스크를 ReadWriteOnce PersistentVolume으로 참조합니다. GKE는 기본 디스크를 자동으로 포맷하며, 포드가 데이터를 디스크에 쓸 수 있습니다. 포드가 시작되면 포드가 디스크에 원하는 데이터를 쓰는지 확인합니다.

ReadOnlyMany PersistentVolume 만들기

다음 메서드 중 하나를 사용하여 ReadOnlyMany PersistentVolume을 만들 수 있습니다.

  • 데이터가 채워진 소스 PersistentVolume의 볼륨 스냅샷
  • 데이터가 채워진 소스 PersistentVolume의 볼륨 클론
  • 이미 데이터가 채워진 기존 영구 디스크

볼륨 스냅샷

  1. 소스 PersistentVolume의 볼륨 스냅샷을 만듭니다.

  2. 다음 PersistentVolumeClaim 매니페스트를 snapshot-pvc.yaml로 저장합니다.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      namespace: PVC_NAMESPACE
      name: PVC_NAME
    spec:
      dataSource:
        apiGroup: snapshot.storage.k8s.io
        kind: VolumeSnapshot
        name: SNAPSHOT_NAME
      accessModes:
        - ReadOnlyMany
      storageClassName: premium-rwo
      resources:
        requests:
          storage: STORAGE_SIZE
    

    다음을 바꿉니다.

    • PVC_NAMESPACE: 새 PersistentVolumeClaim의 네임스페이스입니다.
    • PVC_NAME: 새 PersistentVolumeClaim의 이름입니다.
    • SNAPSHOT_NAME: VolumeSnapshot 객체의 이름입니다.
    • STORAGE_SIZE: 요청할 스토리지 용량입니다. 소스 PersistentVolumeClaim에서 요청된 크기와 동일해야 합니다.
  3. 매니페스트를 클러스터에 적용합니다.

    kubectl apply -f snapshot-pvc.yaml
    

이렇게 하면 클러스터에 PVC_NAME이라는 새 PersistentVolumeClaim이 생성되고, GKE는 이를 사용하여 소스 영구 디스크의 스냅샷에서 가져온 데이터가 포함된 새 PersistentVolume을 동적으로 프로비저닝합니다.

볼륨 클론

볼륨 클론을 사용하기 전에 이 방법의 제한사항을 숙지해야 합니다.

  1. 다음 매니페스트를 cloning-pvc.yaml로 저장합니다.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      namespace: PVC_NAMESPACE
      name: PVC_NAME
    spec:
      dataSource:
        name: SOURCE_PVC
        kind: PersistentVolumeClaim
      accessModes:
        - ReadOnlyMany
      storageClassName: STORAGE_CLASS_NAME
      resources:
        requests:
          storage: STORAGE_SIZE
    

    다음을 바꿉니다.

    • PVC_NAMESPACE: 새 PersistentVolumeClaim의 네임스페이스입니다.
    • PVC_NAME: 새 PersistentVolumeClaim의 이름입니다.
    • SOURCE_PVC: 데이터가 채워진 소스 PersistentVolumeClaim의 이름입니다.
    • STORAGE_CLASS_NAME: 새 PersistentVolumeClaim의 스토리지 클래스입니다. 소스 PersistentVolumeClaim의 스토리지 클래스와 동일해야 합니다.
    • STORAGE_SIZE: 새 PersistentVolumeClaim의 스토리지 용량입니다. 소스 PersistentVolumeClaim에서 요청한 크기와 동일해야 합니다.
  2. 매니페스트를 클러스터에 적용합니다.

    kubectl apply -f cloning-pvc.yaml
    

이렇게 하면 PVC_NAME이라는 PersistentVolumeClaim이 생성되며, GKE는 이를 사용하여 소스 PersistentVolume의 데이터로 ReadOnlyMany 모드에서 새 PersistentVolume을 만듭니다.

볼륨 클론에 대한 자세한 내용은 영구 볼륨 클론 만들기를 참조하세요.

기존 영구 디스크

  1. 다음 매니페스트를 preexisting-disk-pv-pvc.yaml로 저장합니다.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: PV_NAME
    spec:
      storageClassName: "STORAGE_CLASS_NAME"
      capacity:
        storage: DISK_SIZE
      accessModes:
        - ReadOnlyMany
      claimRef:
        namespace: PVC_NAMESPACE
        name: PVC_NAME
      csi:
        driver: pd.csi.storage.gke.io
        volumeHandle: DISK_ID
        fsType: FS_TYPE
        readOnly: true
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      namespace: PVC_NAMESPACE
      name: PVC_NAME
    spec:
      storageClassName: "STORAGE_CLASS_NAME"
      volumeName: PV_NAME
      accessModes:
        - ReadOnlyMany
      resources:
        requests:
          storage: DISK_SIZE
    

    다음을 바꿉니다.

    • PV_NAME: 새 PersistentVolume 이름입니다.
    • STORAGE_CLASS_NAME: 새 StorageClass의 이름입니다.
    • DISK_SIZE: 기존 영구 디스크의 크기입니다. 예를 들면 500G입니다.
    • PVC_NAMESPACE: 새 PersistentVolumeClaim의 네임스페이스입니다.
    • PVC_NAME: 새 PersistentVolumeClaim 이름입니다.
    • DISK_ID: 기존 영구 디스크의 식별자입니다. 형식은 영역 영구 디스크의 경우 projects/{project_id}/zones/{zone_name}/disks/{disk_name}, 리전 영구 디스크의 경우 projects/{project_id}/regions/{region_name}/disks/{disk_name}입니다.
    • FS_TYPE: 파일 시스템 유형입니다. 기본값(ext4)으로 그대로 두거나 xfs를 사용합니다. 클러스터에서 Windows Server 노드 풀을 사용하는 경우 NTFS로 변경해야 합니다.
  2. 매니페스트를 클러스터에 적용합니다.

    kubectl apply -f preexisting-disk-pv-pvc.yaml
    

그러면 ReadOnlyMany 모드로 PVC_NAME이라는 PersistentVolumeClaim과 PV_NAME이라는 PersistentVolume이 생성됩니다.

기존 영구 디스크 사용에 대한 자세한 내용은 기존 영구 디스크를 참조하세요.

포드에서 PersistentVolumeClaim 사용

이제 여러 노드의 여러 포드에서 동시에 읽기 전용 모드로 새 PersistentVolumeClaim을 참조할 수 있습니다. ReadWriteOnce 모드로 영구 디스크를 동시에 여러 노드에 연결할 수 없습니다. 자세한 내용은 배포와 StatefulSet 비교를 참조하세요.

포드 사양에서는 다음 예시와 같이 volumeMounts 섹션과 volumes 섹션에 readOnly: true를 지정해야 합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: multi-read
  labels:
    app: web-server
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-server
  template:
    metadata:
      labels:
        app: web-server
    spec:
      containers:
      - name: web-server
        image: nginx
        volumeMounts:
        - mountPath: /test-mnt
          name: my-volume
          readOnly: true
      volumes:
      - name: my-volume
        persistentVolumeClaim:
          claimName: PVC_NAME
          readOnly: true

다음 단계