이 페이지에서는 ReadOnlyMany 액세스 모드를 사용하여 클러스터에 영구 디스크를 추가하는 방법을 설명합니다. 이 모드를 사용하면 다양한 노드의 여러 포드에서 읽을 수 있도록 디스크를 마운트할 수 있습니다.
이 모드에 대한 자세한 내용은 영구 볼륨 액세스 모드를 참조하세요.
요구사항
- 클러스터는 GKE 버전 1.22 이상을 실행해야 합니다.
- 클러스터는 Compute Engine 영구 디스크 CSI 드라이버를 사용해야 합니다.
소스 영구 디스크 포맷 및 채우기
읽기 전용 모드에서 영구 디스크를 사용하려면 소스 영구 디스크에 데이터를 채운 다음 볼륨을 클론하거나 볼륨 스냅샷을 사용하여 데이터를 새 ReadOnlyMany PersistentVolume으로 이동해야 합니다.
디스크를 포맷하고 디스크에 데이터를 채웁니다. 디스크를 포맷하려면 포드에서 디스크를 ReadWriteOnce PersistentVolume으로 참조합니다. GKE는 기본 디스크를 자동으로 포맷하며, 포드가 데이터를 디스크에 쓸 수 있습니다. 포드가 시작되면 포드가 디스크에 원하는 데이터를 쓰는지 확인합니다.
ReadOnlyMany
PersistentVolume 만들기
다음 메서드 중 하나를 사용하여 ReadOnlyMany
PersistentVolume을 만들 수 있습니다.
- 데이터가 채워진 소스 PersistentVolume의 볼륨 스냅샷
- 데이터가 채워진 소스 PersistentVolume의 볼륨 클론
이미 데이터가 채워진 기존 영구 디스크
볼륨 스냅샷
다음 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에서 요청된 크기와 동일해야 합니다.
매니페스트를 클러스터에 적용합니다.
kubectl apply -f snapshot-pvc.yaml
이렇게 하면 클러스터에 PVC_NAME
이라는 새 PersistentVolumeClaim이 생성되고, GKE는 이를 사용하여 소스 영구 디스크의 스냅샷에서 가져온 데이터가 포함된 새 PersistentVolume을 동적으로 프로비저닝합니다.
볼륨 클론
볼륨 클론을 사용하기 전에 이 방법의 제한사항을 숙지해야 합니다.
다음 매니페스트를
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에서 요청한 크기와 동일해야 합니다.
매니페스트를 클러스터에 적용합니다.
kubectl apply -f cloning-pvc.yaml
이렇게 하면 PVC_NAME
이라는 PersistentVolumeClaim이 생성되며, GKE는 이를 사용하여 소스 PersistentVolume의 데이터로 ReadOnlyMany 모드에서 새 PersistentVolume을 만듭니다.
볼륨 클론에 대한 자세한 내용은 영구 볼륨 클론 만들기를 참조하세요.
기존 영구 디스크
다음 매니페스트를
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
로 변경해야 합니다.
매니페스트를 클러스터에 적용합니다.
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
다음 단계
- 기존 영구 디스크를 PersistentVolume으로 사용에 대해 자세히 알아보기
- Compute Engine 영구 디스크에 대해 자세히 알아보기