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

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

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

영구 디스크 포맷

읽기 전용 모드에서 영구 디스크를 사용하기 전에 먼저 포맷해야 합니다.

영구 디스크를 포맷하려면 다음 안내를 따르세요.

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

  2. 디스크를 포맷하고 디스크에 데이터를 채웁니다. 디스크를 포맷하려면 다음을 수행합니다.

    • pod에서 디스크를 ReadWriteOnce 볼륨으로 참조합니다. 이렇게 하면 GKE에서 자동으로 디스크를 포맷하고 pod가 디스크에 데이터를 미리 채울 수 있습니다. pod가 시작되면 pod가 디스크에 데이터를 기록하는지 확인합니다.
    • 수동으로 디스크를 VM에 마운트하고 포맷합니다. 원하는 데이터를 디스크에 작성합니다. 자세한 내용은 영구 디스크 포맷을 참조하세요.
  3. 디스크를 마운트 해제하고 분리합니다.

    • pod에서 디스크를 참조한 경우 pod를 삭제하고 종료될 때까지 기다린 후 디스크가 자동으로 노드에서 분리될 때까지 기다립니다.
    • VM에 디스크를 마운트한 경우 gcloud compute instances detach-disk를 사용하여 디스크를 분리합니다.
  4. 다음 섹션과 같이 볼륨에 ReadOnlyMany로 액세스하는 pod를 만듭니다.

PersistentVolume 및 PersistentVolumeClaim 만들기

미리 채워진 디스크를 ReadOnlyMany로 마운트하려면 디스크에 PersistentVolume 및 PersistentVolumeClaim을 만듭니다. 이때 accessModes 필드를 ReadOnlyMany로 설정합니다. PersistentVolume의 readOnly 설정을 포함한 추가 구성은 아래를 참조하세요.

CSI 드라이버

클러스터에서 Compute Engine 영구 디스크 CSI 드라이버를 사용하는 경우 csi readOnly 필드를 true로 설정합니다.

다음은 read-only-pd.yaml이라는 예시입니다.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-readonly-pv
spec:
  storageClassName: ""
  capacity:
    storage: 10Gi
  accessModes:
    - ReadOnlyMany
  claimRef:
    namespace: default
    name: my-readonly-pvc
  csi:
    driver: pd.csi.storage.gke.io
    volumeHandle: projects/PROJECT/zones/ZONE/disks/my-test-disk
    fsType: ext4
    readOnly: true
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-readonly-pvc
spec:
  # Specify "" as the storageClassName so it matches the PersistentVolume's StorageClass.
  # A nil storageClassName value uses the default StorageClass. For details, see
  # https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1
  storageClassName: ""
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 10Gi

다음을 바꿉니다.

  • PROJECT를 Google Cloud 프로젝트의 ID로 바꿉니다.
  • ZONE을 디스크의 영역으로 바꿉니다. 예를 들면 us-central1-c입니다.

트리 내 드라이버

클러스터에서 트리 내 Compute Engine 영구 디스크 스토리지 드라이버를 사용하는 경우 gcePersistentDisk readOnly 필드를 true로 설정합니다.

다음은 read-only-pd.yaml이라는 예시입니다.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-readonly-pv
spec:
  storageClassName: ""
  capacity:
    storage: 10Gi
  accessModes:
    - ReadOnlyMany
  claimRef:
    namespace: default
    name: my-readonly-pvc
  gcePersistentDisk:
    pdName: my-test-disk
    fsType: ext4
    readOnly: true
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-readonly-pvc
spec:
  # Specify "" as the storageClassName so it matches the PersistentVolume's StorageClass.
  # A nil storageClassName value uses the default StorageClass. For details, see
  # https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1
  storageClassName: ""
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 10Gi

PersistentVolume 및 PersistentVolumeClaim을 만들려면 kubectl apply -f read-only-pd.yaml을 사용합니다.

Pod에서 PersistentVolumeClaim 사용

워크로드에서 이 PersistentVolumeClaim을 사용할 경우 다음 예시와 같이 pod 사양의 volumeMountsvolumes 섹션에 readOnly: true를 지정해야 합니다.

apiVersion: v1
kind: Pod
metadata:
  name: pod-pvc
spec:
  containers:
  - image: k8s.gcr.io/busybox
    name: busybox
    command:
      - "sleep"
      - "3600"
    volumeMounts:
    - mountPath: /test-mnt
      name: my-volume
      readOnly: true
  volumes:
  - name: my-volume
    persistentVolumeClaim:
      claimName: my-readonly-pvc
      readOnly: true

이제 이 PersistentVolumeClaim을 모두 읽기 전용 모드로 마운트할 수 있는 여러 pod를 서로 다른 노드에 둘 수 있습니다. 그러나 동시에 여러 노드에서 영구 디스크를 쓰기 모드로 연결할 수 없습니다. 자세한 내용은 배포와 StatefulSet 비교를 참조하세요.

다음 단계