Google Kubernetes Engine용 Filestore 멀티 공유 사용

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 가이드에서는 Google Kubernetes Engine용 Filestore 멀티 공유를 GKE Filestore CSI 드라이버와 함께 사용하는 방법을 보여줍니다.

시작하기 전에

  1. 시작하기 전에 Filestore를 사용하는 데 필요한 설정 단계를 완료하세요.

  2. GKE Filestore CSI 드라이버(GKE 버전 1.23 이상)를 사용 설정합니다.

여러 애플리케이션에서 Filestore 멀티 공유 사용

이 섹션에서는 각각 Filestore 멀티 공유 StorageClass를 사용하여 2개의 애플리케이션(DeploymentStatefulset)을 배포하는 방법을 보여줍니다. 또한 GKE가 동일한 기본 Filestore 엔터프라이즈 인스턴스의 모든 볼륨을 빈 패킹(애플리케이션을 GKE 노드에 효율적으로 패키징하는 프로세스)하는 방법도 보여줍니다.

  1. GKE 제공 StorageClass를 사용하거나 커스텀 StorageClass를 만듭니다.

    GKE Filestore CSI 드라이버가 사용 설정되면 사용자는 다음 구성으로 GKE 제공 멀티 공유 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를 만들 수 있습니다.

  2. 단일 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
    
  3. 포드 복제본을 확인합니다.

    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
    
  4. 복제본을 확장합니다.

    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
    

    으로 이동합니다. 명령줄에서 다음 명령어를 실행하여 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
    
  5. 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: k8s.gcr.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
    
    
  6. 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는 Deployment web-server-multishare와 연결됩니다.

    PVC test-pvc-multishare-web-0test-pvc-multishare-web-1은 Statefulset와 연결됩니다.

  7. 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
    

    으로 이동합니다. 명령줄에서 다음 명령어를 실행합니다.

    $ 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
    
  8. Filestore 인스턴스 상태를 확인합니다.

    이제 2개의 복제본 포드가 있는 Deployment와 9개의 복제본 포드가 있는 Statefulset, 각각 100GiB의 총 10개의 PVC가 준비되었습니다. 모든 볼륨은 단일 Filestore 멀티 공유 인스턴스로 패키징됩니다.

    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
    
    

    각 항목의 의미는 다음과 같습니다.

    • YOUR_PROJECT_ID는 사용 중인 프로젝트의 이름입니다. 예를 들면 my-project입니다.

    • REGION은 사용 중인 리전의 이름입니다. 예를 들면 us-central1입니다.

PVC를 확장하고 Filestore 인스턴스 확인

이 섹션에서는 기존 PVC를 확장하고 Filestore 인스턴스 크기를 확인하는 방법을 보여줍니다.

  1. PVC를 확장합니다.

    Filestore 멀티 공유 인스턴스에서 공유를 통해 지원되는 PVC는 최대 1TiB의 크기로 증가할 수 있습니다. 이를 확인하려면 포드가 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"
        }
    }
    
    
  2. 명령줄에서 다음 명령어를 실행하여 크기를 500GiB로 늘립니다.

    $ kubectl edit pvc test-pvc-multishare-web-0
    
    
  3. 명령줄에 파일이 열립니다. spec.resources.requests.storage 필드를 찾고 값을 500Gi로 업데이트합니다.

  4. 명령줄에서 다음 명령어를 실행하여 적용된 변경사항을 확인합니다.

    $ 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로 자동 확장했습니다.

  5. 명령줄에서 다음 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
    

    각 항목의 의미는 다음과 같습니다.

    • YOUR_PROJECT_ID는 사용 중인 프로젝트의 이름입니다. 예를 들면 my-project입니다.

    • REGION은 사용 중인 리전의 이름입니다. 예를 들면 us-central1입니다.

공유 VPC에서 동적 프로비저닝

GKE용 Filestore CSI 드라이버는 공유 VPC의 서비스 프로젝트에서 볼륨의 동적 프로비저닝을 지원합니다. 다음 섹션에서는 Filestore CSI 드라이버를 사용하여 공유 VPC 네트워크의 서비스 프로젝트에 있는 Filestore 멀티 공유 인스턴스에서 볼륨을 동적으로 프로비저닝하는 방법을 보여줍니다.

  1. 공유 VPC 네트워크 및 비공개 서비스 액세스의 설정 단계를 완료합니다.

  2. StorageClass를 만들어 공유 VPC의 Filestore 멀티 공유 인스턴스에서 지원하는 볼륨을 동적으로 프로비저닝합니다.

    다음 명령어를 실행하여 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 할당 만들기를 참조하세요.

  3. 배포를 만듭니다.

    다음 명령어를 실행하여 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 멀티 공유 인스턴스에서 호스팅되는 GKE 볼륨을 만들 수 있습니다. 이 섹션에서는 Filestore 인스턴스용 고객 관리 암호화 키(CMEK)를 설정하는 방법을 설명합니다.

고객 관리 키 세부정보는 StorageClass에 제공할 수 있습니다. 이 StorageClass를 참조하는 Filestore CSI 드라이버에 의해 동적으로 생성된 모든 인스턴스에는 CMEK가 사용 설정됩니다.

  1. 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
    

    각 항목의 의미는 다음과 같습니다.

    • KEY_PROJECT_ID는 키가 있는 프로젝트의 이름입니다. 예를 들면 my-key-project입니다.

    • REGION은 사용 중인 리전의 이름입니다. 예를 들면 us-central1입니다.

    • RING_NAME은 키링 이름입니다. 예를 들면 my-key-ring-name입니다.

    • KEY_NAME은 키 이름입니다. 예를 들면 my-key-name입니다.

  2. 배포를 만듭니다.

    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 멀티 공유 인스턴스를 사용하면 각 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입니다.

클러스터에 있는 영구 볼륨 두 개는 단일 Filestore 인스턴스에서 호스팅됩니다.

다음 단계