이 가이드에서는 Google Kubernetes Engine용 Filestore Multishares를 GKE Filestore CSI 드라이버와 함께 사용하는 방법을 보여줍니다.
시작하기 전에
시작하기 전에 Filestore를 사용하는 데 필요한 설정 단계를 완료하세요.
GKE Filestore CSI 드라이버 버전 1.23 이상을 사용 설정합니다.
드라이버 버전 1.23~1.26은 인스턴스당 최대 10개의 공유를 지원합니다.
드라이버 버전 1.27 이상은 인스턴스당 최대 80개의 공유를 지원합니다.
최신 GKE Filestore CSI 드라이버 요구사항은 Filestore CSI 드라이버로 Filestore 인스턴스에 액세스를 참조하세요.
여러 애플리케이션에서 Filestore Multishares 사용
이 섹션에서는 각각 Filestore Multishares StorageClass를 사용하여 2개의 애플리케이션(Deployment 및 Statefulset)을 배포하는 방법을 보여줍니다. 또한 GKE가 동일한 기본 Filestore 엔터프라이즈 인스턴스의 모든 볼륨을 빈 패킹(애플리케이션을 GKE 노드에 효율적으로 패키징하는 프로세스)하는 방법도 보여줍니다.
GKE에서 제공하는 StorageClass인
enterprise-multishare-rwx
를 사용하여 최대 10개의 공유를 지원하는 인스턴스를 만듭니다.- 최대 80개의 공유를 지원하는 인스턴스를 만들려면 커스텀 StorageClass를 만들어야 합니다. 이 가이드에서는 인스턴스당 공유 한도가 10개인 StorageClass를 사용합니다.
GKE Filestore CSI 드라이버가 사용 설정되면 사용자는 다음 구성으로 GKE 제공 Multishares StorageClass
enterprise-multishare-rwx
에 액세스할 수 있습니다. 이 StorageClass를 참조하여, GKE 워크로드 수요에는 다음이 필요하므로 GKE Filestore CSI 드라이버는 동적 볼륨 프로비저닝을 사용하여 새 영구 볼륨 클레임(PVC)에 영구 볼륨(PV)을 자동으로 만듭니다.kubectl describe sc enterprise-multishare-rwx Name: enterprise-multishare-rwx IsDefaultClass: No Annotations: components.gke.io/component-name=filestorecsi,components.gke.io/component-version=0.7.2,components.gke.io/layer=addon Provisioner: filestore.csi.storage.gke.io Parameters: instance-storageclass-label=enterprise-multishare-rwx,multishare=true,tier=enterprise AllowVolumeExpansion: True MountOptions: <none> ReclaimPolicy: Delete VolumeBindingMode: WaitForFirstConsumer Events: <none>
커스텀 StorageClass 만들기
Filestore 인스턴스당 최신 용량 한도를 최대 80개 공유까지 활용하려면 다음 템플릿을 기반으로 커스텀 StorageClass를 만듭니다.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: csi-filestore-multishare-128
provisioner: filestore.csi.storage.gke.io
parameters:
tier: enterprise
multishare: "true"
max-volume-size: "128Gi"
network: default
allowVolumeExpansion: true
StorageClass 이름을 변경할 때는 다음 요구사항을 고려하세요.
StorageClass 이름은 유효한 DNS 하위 도메인 이름이어야 합니다.
Multishares StorageClass 이름은 인스턴스 라벨로도 사용되며 라벨 이름 지정 가이드라인을 따라야 합니다.
애플리케이션에 즉각적인 볼륨 프로비저닝이 필요한 경우
Immediate
볼륨 바인딩 모드를 포함합니다.volumeBindingMode: Immediate
예를 들어 볼륨 프로비저닝이 GKE 클러스터에서 포드 생성에 따라 종속되도록 하지 않으려면 이 사양을 사용합니다.
드라이버 버전 1.27부터 인스턴스당 10개가 넘는 공유를 할당하려는 경우
max-volume-size
매개변수를 포함하고 첫 번째 열에서 허용되는 값 중 하나를 할당합니다.최대 볼륨 크기(공유 크기) 인스턴스당 최대 공유 수 128GiB 80 256GiB 40 512GiB 20 1024GiB 10 예를 들어 키 값 쌍
max-volume-size: "128Gi"
를 추가하면 StorageClass가 최대 80개 공유(각각 10GiB~128GiB 크기)를 10TiB 엔터프라이즈 등급 인스턴스에 매핑합니다.이 기능은 GKE Filestore CSI 드라이버 버전 1.23부터 1.26까지로 생성된 Filestore 인스턴스와 하위 호환성을 갖습니다.
기존 인스턴스는 확장 가능한 최소 공유 크기가 10GiB인 새 PVC 또는 공유를 만들 수 있습니다.
GKE Filestore CSI 드라이버 버전 1.27 이상은 기존 엔터프라이즈 인스턴스를 인식하고 1024GiB(1TiB)의 기본 최대 공유 크기를 할당합니다. 따라서 기존 인스턴스는 인스턴스당 10개 공유라는 최대 공유 수로 제한됩니다.
자세한 내용은 GKE용 Filestore 다중 공유를 참조하세요.
단일 PVC를 사용하여 여러 개의 포드 복제본이 있는 Deployment를 만듭니다.
다음과 비슷한 YAML 구성 파일을 만드세요.
cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: web-server-multishare labels: app: nginx spec: replicas: 5 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /usr/share/nginx/html name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: test-pvc-fs --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-pvc-fs spec: accessModes: - ReadWriteMany storageClassName: enterprise-multishare-rwx resources: requests: storage: 100Gi EOF
포드 복제본을 확인합니다.
a. 명령줄에서 다음 명령어를 실행하여 PVC 상태를 확인합니다.
kubectl get pvc
다음과 비슷한 응답이 표시될 것입니다.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc-fs Bound pvc-056d769d-a709-4bb2-b6d3-0361871b27a2 100Gi RWX enterprise-multishare-rwx 35m
b. 명령줄에서 다음 명령어를 실행하여 포드 상태를 확인합니다.
kubectl get pod
다음과 비슷한 응답이 표시될 것입니다.
NAME READY STATUS RESTARTS AGE web-server-multishare-76c9ffb4b5-2dhml 1/1 Running 0 35m web-server-multishare-76c9ffb4b5-7mtcb 1/1 Running 0 35m web-server-multishare-76c9ffb4b5-csdbd 1/1 Running 0 35m web-server-multishare-76c9ffb4b5-rgx82 1/1 Running 0 35m web-server-multishare-76c9ffb4b5-zjl27 1/1 Running 0 35m
복제본을 확장합니다.
a. 명령줄에서 다음 명령어를 실행하여 Deployment를 수정합니다.
kubectl edit deployment web-server-multishare
b. 파일이 명령줄에서 열립니다.
spec.replicas
필드를 찾고 값을10
로 업데이트합니다.c. 명령줄에서 다음 명령어를 실행하여 적용된 변경사항을 확인하세요.
kubectl get pod
다음과 비슷한 응답이 표시될 것입니다.
NAME READY STATUS RESTARTS AGE web-server-multishare-76c9ffb4b5-2dhml 1/1 Running 0 36m web-server-multishare-76c9ffb4b5-5ctkf 1/1 Running 0 3s web-server-multishare-76c9ffb4b5-7mtcb 1/1 Running 0 36m web-server-multishare-76c9ffb4b5-8dwmw 1/1 Running 0 2s web-server-multishare-76c9ffb4b5-csdbd 1/1 Running 0 36m web-server-multishare-76c9ffb4b5-lndcq 1/1 Running 0 2s web-server-multishare-76c9ffb4b5-rgx82 1/1 Running 0 36m web-server-multishare-76c9ffb4b5-vtd6p 1/1 Running 0 3s web-server-multishare-76c9ffb4b5-xm49s 1/1 Running 0 3s web-server-multishare-76c9ffb4b5-zjl27 1/1 Running 0 36m
10개의 포드가 실행됩니다.
d. 명령줄에서 다음 명령어를 실행합니다.
kubectl get deployment
다음과 비슷한 응답이 표시될 것입니다.
NAME READY UP-TO-DATE AVAILABLE AGE web-server-multishare 10/10 10 10 36m
e. 명령줄에서 다음 명령어를 실행하여 PVC 바인딩 상태를 확인합니다.
kubectl get pvc
다음과 비슷한 응답이 표시될 것입니다.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc-fs Bound pvc-056d769d-a709-4bb2-b6d3-0361871b27a2 100Gi RWX enterprise-multishare-rwx 37m
f. 명령줄에서 다음 명령어를 실행하여 Deployment를 수정합니다.
kubectl edit deployment web-server-multishare
g. 파일이 명령줄에서 열립니다.
spec.replicas
필드를 찾고 값을2
로 업데이트합니다.h. 명령줄에서 다음 명령어를 실행하여 적용된 변경사항을 확인하세요.
kubectl get pod
다음과 비슷한 응답이 표시될 것입니다.
NAME READY STATUS RESTARTS AGE web-server-multishare-76c9ffb4b5-2dhml 1/1 Running 0 38m web-server-multishare-76c9ffb4b5-7mtcb 1/1 Running 0 38m
Statefulset를 배포합니다.
기본 Filestore 인스턴스를 공유하는 두 번째 애플리케이션을 배포합니다.
200GiB의 공간을 프로비저닝하고 첫 번째 애플리케이션과 동일한 기본 Filestore 인스턴스를 사용하는지 확인하면 됩니다.
그런 다음 총 900GiB의 복제본 9개(100GiB를 사용하는 복제본 9개)로 애플리케이션을 확장하고 GKE가 인스턴스를 공유하여 동일한 Filestore 인스턴스를 사용하는지 확인합니다.
다음과 비슷한 YAML 구성 파일을 만드세요.
cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.k8s.io/nginx-slim:0.8 ports: - containerPort: 80 name: web volumeMounts: - name: test-pvc-multishare mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: test-pvc-multishare spec: accessModes: [ "ReadWriteMany" ] storageClassName: enterprise-multishare-rwx resources: requests: storage: 100Gi EOF
Statefulset 복제본 및 볼륨을 확인합니다.
명령줄에서 다음 명령어를 실행합니다.
kubectl get pod
다음과 비슷한 응답이 표시될 것입니다.
NAME READY STATUS RESTARTS AGE web-0 1/1 Running 0 4m48s web-1 1/1 Running 0 3m32s web-server-multishare-76c9ffb4b5-2dhml 1/1 Running 0 57m web-server-multishare-76c9ffb4b5-7mtcb 1/1 Running 0 57m
처음 두 포드는 Statefulset와 연결되어 있습니다. 마지막 두 포드는 Deployment와 연결됩니다.
명령줄에서 다음 명령어를 실행합니다.
kubectl get statefulset
다음과 비슷한 응답이 표시될 것입니다.
NAME READY AGE web 2/2 2m8s
명령줄에서 다음 명령어를 실행합니다.
kubectl get pvc
다음과 비슷한 응답이 표시될 것입니다.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc-fs Bound pvc-056d769d-a709-4bb2-b6d3-0361871b27a2 100Gi RWX enterprise-multishare-rwx 54m test-pvc-multishare-web-0 Bound pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7 100Gi RWX enterprise-multishare-rwx 114s test-pvc-multishare-web-1 Bound pvc-8b37cd6e-d764-4d38-80d7-d74228536cfe 100Gi RWX enterprise-multishare-rwx 38s
PVC
test-pvc-fs
는 Deploymentweb-server-multishare
와 연결됩니다.PVC
test-pvc-multishare-web-0
및test-pvc-multishare-web-1
은 Statefulset와 연결됩니다.Statefulset 복제본을 확장합니다.
복제본 수를 9개로 늘립니다. 개수가 증가함에 따라 해당하는 PVC가 생성됩니다.
a. 명령줄에서 다음 명령어를 실행합니다.
kubectl edit statefulset web
b. 파일이 명령줄에서 열립니다.
spec.replicas
필드를 찾고 값을9
로 업데이트합니다.c. 명령줄에서 다음 명령어를 실행하여 적용된 변경사항을 확인하세요.
kubectl get statefulset
다음과 비슷한 응답이 표시될 것입니다.
NAME READY AGE web 9/9 13m
d. 명령줄에서 다음 명령어를 실행합니다.
kubectl get deployment
다음과 비슷한 응답이 표시될 것입니다.
NAME READY UP-TO-DATE AVAILABLE AGE web-server-multishare 2/2 2 2 65m
e. 명령줄에서 다음 명령어를 실행합니다.
kubectl get pvc
다음과 비슷한 응답이 표시될 것입니다.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc-fs Bound pvc-056d769d-a709-4bb2-b6d3-0361871b27a2 100Gi RWX enterprise-multishare-rwx 65m test-pvc-multishare-web-0 Bound pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7 100Gi RWX enterprise-multishare-rwx 13m test-pvc-multishare-web-1 Bound pvc-8b37cd6e-d764-4d38-80d7-d74228536cfe 100Gi RWX enterprise-multishare-rwx 12m test-pvc-multishare-web-2 Bound pvc-3fcbd132-939f-4364-807a-7c8ac6a3e64e 100Gi RWX enterprise-multishare-rwx 5m12s test-pvc-multishare-web-3 Bound pvc-5894afa5-2502-4ee7-9d5c-b7378cb85479 100Gi RWX enterprise-multishare-rwx 4m57s test-pvc-multishare-web-4 Bound pvc-ebbe452b-bc8f-4624-a830-a2094cce0d67 100Gi RWX enterprise-multishare-rwx 4m36s test-pvc-multishare-web-5 Bound pvc-5a73a698-d174-44cb-a3a1-e767966c3417 100Gi RWX enterprise-multishare-rwx 4m20s test-pvc-multishare-web-6 Bound pvc-102da6a9-2ca6-4f9e-9896-8fe14709db7a 100Gi RWX enterprise-multishare-rwx 3m55s test-pvc-multishare-web-7 Bound pvc-160e81cd-c5bf-4ae6-966e-518e8249e02d 100Gi RWX enterprise-multishare-rwx 3m38s test-pvc-multishare-web-8 Bound pvc-9b52d773-2e9a-40de-881c-dc06945ba3d7 100Gi RWX enterprise-multishare-rwx 118s
Filestore 인스턴스 상태를 확인합니다.
이제 2개의 복제본 포드가 있는 Deployment와 9개의 복제본 포드가 있는 Statefulset, 각각 100GiB의 총 10개의 PVC가 준비되었습니다. 모든 볼륨은 단일 Filestore Multishares 인스턴스로 패키징됩니다.
a. 명령줄에서 다음
instances list
명령어를 실행합니다.gcloud beta filestore instances list --project=YOUR_PROJECT_ID --region=REGION
각 항목의 의미는 다음과 같습니다.
YOUR_PROJECT_ID는 사용 중인 프로젝트의 이름입니다. 예를 들면
my-project
입니다.REGION은 사용 중인 리전의 이름입니다. 예를 들면
us-central1
입니다.
다음과 비슷한 응답이 표시될 것입니다.
INSTANCE_NAME LOCATION TIER CAPACITY_GB FILE_SHARE_NAME IP_ADDRESS STATE CREATE_TIME fs-a767cef8-738e-4c8e-b70b-09cbb872d016 us-central1 ENTERPRISE 1024 N/A 10.192.53.2 READY 2022-06-21T21:15:30
b. 명령줄에서 다음
instances describe
명령어를 실행합니다.gcloud filestore instances describe fs-a767cef8-738e-4c8e-b70b-09cbb872d016 --project=YOUR_PROJECT_ID --region=REGION capacityGb: '1024' capacityStepSizeGb: '256' createTime: '2022-06-21T21:15:30.464237089Z' labels: storage_gke_io_created-by: filestore_csi_storage_gke_io storage_gke_io_storage-class-id: enterprise-multishare-rwx maxCapacityGb: '10240' maxShareCount: '10' multiShareEnabled: true name: projects/YOUR_PROJECT_ID/locations/REGION/instances/fs-a767cef8-738e-4c8e-b70b-09cbb872d016 networks: - connectMode: DIRECT_PEERING ipAddresses: - 10.192.53.2 modes: - MODE_IPV4 network: csi-filestore-test-network reservedIpRange: 10.192.53.0/26 state: READY tier: ENTERPRISE
각 항목의 의미는 다음과 같습니다.
PVC를 확장하고 Filestore 인스턴스 확인
이 섹션에서는 기존 PVC를 확장하고 Filestore 인스턴스 크기를 확인하는 방법을 보여줍니다.
PVC를 확장합니다.
Filestore 다중 공유 인스턴스의 공유로 지원되는 PVC는
max-volume-size
매개변수에 지정된 최대 크기로 증가할 수 있습니다. 이를 확인하려면 포드가 Statefulset를 사용하는 동안 Statefulset와 연결된 볼륨 중 하나를 확장하세요.명령줄에서 다음 명령어를 실행하여 복제본 0의 현재 PVC 크기를 확인합니다.
kubectl get pvc test-pvc-multishare-web-0 -o json { "apiVersion": "v1", "kind": "PersistentVolumeClaim", "metadata": { "annotations": { "pv.kubernetes.io/bind-completed": "yes", "pv.kubernetes.io/bound-by-controller": "yes", "volume.beta.kubernetes.io/storage-provisioner": "filestore.csi.storage.gke.io", "volume.kubernetes.io/storage-provisioner": "filestore.csi.storage.gke.io" }, "creationTimestamp": "2022-06-21T22:07:42Z", "finalizers": [ "kubernetes.io/pvc-protection" ], "labels": { "app": "nginx" }, "name": "test-pvc-multishare-web-0", "namespace": "default", "resourceVersion": "48395", "uid": "7aa21b5a-5343-4547-b7d7-414c16af15a7" }, "spec": { "accessModes": [ "ReadWriteMany" ], "resources": { "requests": { "storage": "100Gi" } }, "storageClassName": "enterprise-multishare-rwx", "volumeMode": "Filesystem", "volumeName": "pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7" }, "status": { "accessModes": [ "ReadWriteMany" ], "capacity": { "storage": "100Gi" }, "phase": "Bound" } }
명령줄에서 다음 명령어를 실행하여 크기를 500GiB로 늘립니다.
kubectl edit pvc test-pvc-multishare-web-0
파일이 명령줄에서 열립니다.
spec.resources.requests.storage
필드를 찾고 값을500Gi
로 업데이트합니다.명령줄에서 다음 명령어를 실행하여 적용된 변경사항을 확인하세요.
kubectl get pvc test-pvc-multishare-web-0
다음과 비슷한 응답이 표시될 것입니다.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc-multishare-web-0 Bound pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7 500Gi RWX enterprise-multishare-rwx 28m
Filestore CSI 드라이버가 먼저 기본 Filestore 인스턴스를 확장한 다음 PVC를 통해 공유를 확장하여 요청을 수락했습니다.
특히 Filestore CSI 드라이버는 새 공유 크기 500Gi를 수용할 수 있도록 인스턴스를 1536Gi로 자동 확장했습니다.
명령줄에서 다음
instances describe
명령어를 실행하여 Filestore 인스턴스 용량을 확인합니다.gcloud filestore instances describe fs-a767cef8-738e-4c8e-b70b-09cbb872d016 --project=YOUR_PROJECT_ID --region=REGION capacityGb: '1536' capacityStepSizeGb: '256' createTime: '2022-06-21T21:15:30.464237089Z' labels: storage_gke_io_created-by: filestore_csi_storage_gke_io storage_gke_io_storage-class-id: enterprise-multishare-rwx maxCapacityGb: '10240' maxShareCount: '10' multiShareEnabled: true name: projects/YOUR_PROJECT_ID/locations/us-central1/instances/fs-a767cef8-738e-4c8e-b70b-09cbb872d016 networks: - connectMode: DIRECT_PEERING ipAddresses: - 10.192.53.2 modes: - MODE_IPV4 network: csi-filestore-test-network reservedIpRange: 10.192.53.0/26 state: READY tier: ENTERPRISE
각 항목의 의미는 다음과 같습니다.
공유 VPC의 동적 프로비저닝
GKE용 Filestore CSI 드라이버는 공유 VPC의 서비스 프로젝트에서 볼륨의 동적 프로비저닝을 지원합니다. 다음 섹션에서는 Filestore CSI 드라이버를 사용하여 공유 VPC 네트워크의 서비스 프로젝트에 있는 Filestore Multishares 인스턴스에서 볼륨을 동적으로 프로비저닝하는 방법을 보여줍니다.
공유 VPC 네트워크 및 비공개 서비스 액세스를 위한 설정 단계를 완료하세요.
StorageClass를 만들어 공유 VPC의 Filestore Multishares 인스턴스에서 지원하는 볼륨을 동적으로 프로비저닝합니다.
다음 명령어를 실행하여
StorageClass
리소스를 배포합니다.cat <<EOF | kubectl apply -f - apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-filestore-multishare-sharedvpc provisioner: filestore.csi.storage.gke.io parameters: network: "projects/HOST_PROJECT_ID/global/networks/SHARED_VPC_NAME" connect-mode: PRIVATE_SERVICE_ACCESS tier: enterprise multishare: "true" allowVolumeExpansion: true EOF
각 항목의 의미는 다음과 같습니다.
HOST_PROJECT_ID는 공유 VPC 네트워크 호스트 프로젝트의 ID 또는 이름입니다. 예를 들면
my-host-project
입니다.SHARED_VPC_NAME은 공유 VPC 네트워크 이름입니다. 예를 들면
my-shared-vpc
입니다.
예약된 IP 주소 범위 내에서 리소스를 배포하려면 명령어에 사용된 매개변수에 다음 줄을 추가합니다.
reserved-ip-range: RESERVED_NAME
여기서 RESERVED_NAME은 Filestore 인스턴스를 프로비저닝할 수 있는 예약된 IP 주소 범위의 이름입니다. 예를 들면
filestore-reserved-ip-range
입니다. 예약된 IP 범위가 지정된 경우 이 범위는 직접 CIDR 값이 아닌 이름이 지정된 IP 주소 범위여야 합니다.자세한 내용은 IP 주소 범위 할당 또는 예약된 IP 주소 범위 구성을 참조하세요. Google Cloud 콘솔을 사용하여 예약된 이름을 만드는 방법의 예시는 IP 할당 만들기를 참조하세요.
배포를 만듭니다.
다음 명령어를 실행하여
Deployment
리소스를 만듭니다.cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: web-server-multishare labels: app: nginx spec: replicas: 5 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /usr/share/nginx/html name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: test-pvc-fs-sharedvpc --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-pvc-fs-sharedvpc spec: accessModes: - ReadWriteMany storageClassName: csi-filestore-multishare-sharedvpc resources: requests: storage: 100Gi EOF
CMEK가 사용 설정된 Filestore 인스턴스
CMEK가 사용 설정된 Filestore Multishares 인스턴스에서 호스팅되는 GKE 볼륨을 만들 수 있습니다. 이 섹션에서는 Filestore 인스턴스용 고객 관리 암호화 키(CMEK)를 설정하는 방법을 설명합니다.
고객 관리 키 세부정보는 StorageClass에서 제공될 수 있습니다. 이 StorageClass를 참조하는 Filestore CSI 드라이버로 동적으로 생성된 모든 인스턴스에는 CMEK가 사용 설정됩니다.
CMEK가 사용 설정된 StorageClass를 만드세요.
a. 다음 명령어를 실행합니다.
cat <<EOF | kubectl apply -f - apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-filestore-multishare-cmek provisioner: filestore.csi.storage.gke.io parameters: tier: enterprise multishare: "true" instance-encryption-kms-key: projects/KEY_PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME allowVolumeExpansion: true EOF
각 항목의 의미는 다음과 같습니다.
배포를 만듭니다.
b. 다음 명령어를 실행하여
Deployment
리소스를 만듭니다.cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: web-server-multishare labels: app: nginx spec: replicas: 5 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /usr/share/nginx/html name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: test-pvc-fs-cmek --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-pvc-fs-cmek spec: accessModes: - ReadWriteMany storageClassName: csi-filestore-multishare-cmek resources: requests: storage: 100Gi EOF
PVC를 Filestore 인스턴스에 매핑
이 섹션에서는 PVC를 Filestore 인스턴스에 매핑하는 방법을 설명합니다.
Filestore Multishares 인스턴스를 사용하면 각 PVC가 Filestore CSI 드라이버에 의해 Filestore 인스턴스에서 호스팅됩니다. 볼륨을 호스팅하는 기본 Filestore 인스턴스와 Kubernetes 볼륨을 나타내는 공유의 세부정보는 영구 볼륨 사양의 volumeHandle
필드에 캡처됩니다. 볼륨 처리 형식은 다음과 같습니다.
modeMultishare/<storageclass-prefix>/<project>/<region>/<filestore-instance-name>/<filestore-share-name>
다음 kubectl
명령어를 사용하면 PVC, PV, Filestore 인스턴스, Filestore 공유 사이의 매핑을 빠르게 확인할 수 있습니다.
명령줄에서 다음 명령어를 실행합니다.
kubectl get pv -o jsonpath='{range .items[*]}{"pv="}{.metadata.name}{",pvc="}{.spec.claimRef.name}{",volumeHandle="}{.spec.csi.volumeHandle}{"\n"}{end}'
다음과 비슷한 응답이 표시될 것입니다.
pv=pvc-67ad9abd-f25e-4130-b7ca-64d28bd29525,pvc=test-pvc-multishare,volumeHandle=modeMultishare/csi-filestore-multishare-sharedvpc/YOUR_PROJECT_ID/us-central1/fs-2109f680-3f04-4ada-b4bc-2a1c7fc47b88/pvc_67ad9abd_f25e_4130_b7ca_64d28bd29525
pv=pvc-c80f4de0-9916-4957-b8ae-b21206650ac0,pvc=test-pvc-fs-sharedvpc,volumeHandle=modeMultishare/csi-filestore-multishare-sharedvpc/YOUR_PROJECT_ID/us-central1/fs-2109f680-3f04-4ada-b4bc-2a1c7fc47b88/pvc_c80f4de0_9916_4957_b8ae_b21206650ac0
각 항목의 의미는 다음과 같습니다.
- YOUR_PROJECT_ID는 사용 중인 프로젝트의 이름입니다. 예를 들면
my-project
입니다.
클러스터에서 2개의 영구 볼륨은 단일 Filestore 인스턴스에 호스팅됩니다.