GKE Parallelstore CSI 드라이버를 사용하여 기존 Parallelstore 인스턴스에 액세스


Parallelstore는 초대를 받아야만 사용 가능합니다. Google Cloud 프로젝트에서 Parallelstore에 대한 액세스 권한을 요청하려면 영업 담당자에게 문의하세요.

이 가이드에서는 정적 프로비저닝을 사용하여 GKE Parallelstore CSI 드라이버로 기존 Parallelstore 인스턴스에 연결하는 방법을 설명합니다. 이렇게 하면 예측 가능하고 통제된 방식으로 기존의 완전 관리형 Parallelstore 인스턴스에 스테이트풀(Stateful) 워크로드의 볼륨으로 액세스할 수 있습니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

Parallelstore CSI 드라이버를 사용하여 기존 Parallelstore 인스턴스에 액세스

GKE 클러스터와 동일한 네트워크 내에 Parallelstore 인스턴스를 이미 프로비저닝한 경우 이 안내에 따라 인스턴스를 참조하는 PersistentVolume을 정적으로 프로비저닝할 수 있습니다.

다음 섹션에서는 Parallelstore CSI 드라이버를 사용하여 기존 Parallelstore 인스턴스에 액세스하는 일반적인 프로세스를 설명합니다.

  1. Parallelstore 인스턴스를 참조하는 PersistentVolume을 만듭니다..
  2. PersistentVolumeClaim을 사용하여 볼륨에 액세스합니다.
  3. (선택사항) 사이드카 컨테이너의 리소스를 구성합니다.
  4. 볼륨을 사용하는 워크로드를 만듭니다.

PersistentVolume 만들기

이 섹션에서는 기존 Parallelstore 인스턴스를 참조하는 PersistentVolume을 만드는 방법에 대한 예시를 보여줍니다.

  1. 다음 명령어를 실행하여 Parallelstore 인스턴스를 찾습니다.

    gcloud beta parallelstore instances list \
        --project=PROJECT_ID \
        --location=LOCATION
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트 ID
    • LOCATION: 클러스터를 포함하는 Compute Engine 영역. Parallelstore CSI 드라이버에 지원되는 영역을 지정해야 합니다.

    출력은 다음과 비슷하게 표시됩니다. 다음 단계로 진행하기 전에 Parallelstore 인스턴스 이름IP 액세스 포인트를 기록해 두세요.

    NAME                                                                                                     capacity  DESCRIPTION  CREATE_TIME                     UPDATE_TIME                     STATE   network  RESERVED_IP_RANGE  ACCESS_POINTS
    projects/my-project/locations/us-central1-a/instances/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563  12000                  2024-03-06T19:18:26.036463730Z  2024-03-06T19:24:44.561441556Z  ACTIVE                              10.51.110.2,10.51.110.4,10.51.110.3
    
  2. parallelstore-pv.yaml이라는 파일에 매니페스트를 저장합니다.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: parallelstore-pv
    spec:
      storageClassName: "STORAGECLASS_NAME"
      capacity:
        storage: STORAGE_SIZE
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      csi:
        driver: parallelstore.csi.storage.gke.io
        volumeHandle: "PROJECT_ID/LOCATION/INSTANCE_NAME/default-pool/default-container"
        volumeAttributes:
          accessPoints: ACCESS_POINTS
          network: NETWORK_NAME
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트 ID
    • LOCATION: Parallelstore 인스턴스의 영역 위치입니다. Parallelstore CSI 드라이버에 지원되는 영역을 지정해야 합니다.
    • INSTANCE_NAME: Parallelstore 인스턴스의 이름입니다. 유효한 volumeHandle 값의 예는 다음과 같습니다. "my-project/us-central1-a/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563/default-pool/default-container".
    • ACCESS_POINTS: Parallelstore 인스턴스의 액세스 포인트입니다(예: 10.51.110.2,10.51.110.4,10.51.110.3).
    • NETWORK_NAME: Parallelstore 인스턴스에 액세스할 수 있는 VPC 네트워크입니다.
    • STORAGECLASS_NAME: StorageClass 이름입니다. 이 속성은 빈 문자열일 수 있지만 PersistentVolumeClaim의 사양과 일치해야 합니다.
    • STORAGE_SIZE: 스토리지 크기입니다(예: 12000Gi).

    PersistentVolume 객체에서 지원되는 전체 필드 목록은 Parallelstore CSI 참조 문서를 참조하세요.

  3. 다음 명령어를 실행하여 PersistentVolume을 만듭니다.

    kubectl apply -f parallelstore-pv.yaml
    

PersistentVolumeClaim을 사용하여 볼륨에 액세스

Parallelstore CSI 드라이버의 StorageClass를 참조하는 PersistentVolumeClaim 리소스를 만들 수 있습니다.

다음 매니페스트 파일에서는 앞에서 만든 StorageClass를 참조하는 ReadWriteMany 액세스 모드 에서 PersistentVolumeClaim을 만드는 방법에 대한 예시를 보여줍니다.

  1. parallelstore-pvc.yaml이라는 파일에 매니페스트를 저장합니다.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: parallelstore-pvc
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: STORAGECLASS_NAME
        volumeName: parallelstore-pv
        resources:
          requests:
            storage: STORAGE_SIZE
    

    다음을 바꿉니다.

    • STORAGECLASS_NAME: StorageClass 이름입니다. PersistentVolume의 사양과 일치해야 합니다.
    • STORAGE_SIZE: 스토리지 크기입니다(예: 12000Gi). PersistentVolume의 사양과 일치해야 합니다.
  2. 다음 명령어를 실행하여 PersistentVolumeClaim을 만듭니다.

      kubectl create -f parallelstore-pvc.yaml
    

(선택사항) 사이드카 컨테이너 리소스 구성

Parallelstore 지원 볼륨을 사용하는 워크로드 포드를 만들면 CSI 드라이버가 볼륨이 Parallelstore 인스턴스 기반인지 확인합니다.

드라이버가 볼륨이 Parallelstore 기반임을 감지하거나 주석 gke-parallelstore/volumes: "true"를 지정하면 CSI 드라이버는 gke-parallelstore-sidecar라는 사이드카 컨테이너를 포드에 자동으로 삽입합니다. 이 사이드카 컨테이너는 Parallelstore 인스턴스를 워크로드에 마운트합니다.

기본적으로 사이드카 컨테이너는 다음 리소스 요청에 따라 구성되지만 리소스 한도에 제한이 없습니다.

  • 250m CPU
  • 512MiB 메모리
  • 10MiB 임시 스토리지

이러한 값을 재정의하려면 다음 예시에 표시된 것처럼 gke-parallelstore/[cpu-request|memory-request|cpu-limit|memory-limit|ephemeral-storage-request] 주석을 선택적으로 지정할 수 있습니다.

apiVersion: v1
kind: Pod
metadata:
  annotations:
    gke-parallelstore/volumes: "true"
    gke-parallelstore/cpu-request: 500m
    gke-parallelstore/memory-request: 1Gi
    gke-parallelstore/ephemeral-storage-request: 500Mi
    gke-parallelstore/cpu-limit: 1000m
    gke-parallelstore/memory-limit: 2Gi
    gke-parallelstore/ephemeral-storage-limit: 1Gi

할당할 리소스 양을 결정할 때 다음 사항을 고려하세요.

  • 요청 또는 한도 값 중 하나가 설정되고 다른 값은 설정되지 않은 경우 GKE는 두 값을 모두 지정된 동일한 값으로 설정합니다.
  • 워크로드에 더 높은 처리량이 필요한 경우 사이드카 컨테이너에 더 많은 CPU를 할당합니다. CPU가 부족하면 I/O 제한이 발생합니다.
  • '0' 값을 사용하여 Standard 클러스터의 리소스 한도를 설정 해제할 수 있습니다. 예를 들어 gke-parallelstore/memory-limit: "0"는 사이드카 컨테이너의 메모리 한도를 삭제합니다. 이는 워크로드에 필요한 gke-parallelstore-sidecar 리소스 양을 결정할 수 없고 사이드카가 노드에서 사용 가능한 모든 리소스를 사용할 수 있게 하려는 경우에 유용합니다.

볼륨을 사용하는 워크로드 만들기

이 섹션에서는 앞에서 만든 PersistentVolumeClaim 리소스를 사용하는 포드를 만드는 방법에 대한 예시를 보여줍니다.

포드 여러 개에서 같은 PersistentVolumeClaim 리소스를 공유할 수 있습니다.

  1. my-pod.yaml 파일에 다음 매니페스트를 저장합니다.

      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        containers:
        - name: nginx
          image: nginx
          volumeMounts:
            - name: parallelstore-volume
              mountPath: /data
        volumes:
        - name: parallelstore-volume
          persistentVolumeClaim:
            claimName: parallelstore-pvc
    
  2. 다음 명령어를 실행하여 매니페스트를 클러스터에 적용합니다.

      kubectl apply -f my-pod.yaml
    

    포드는 GKE에서 PersistentVolumeClaim을 프로비저닝할 때까지 기다린 후 실행을 시작합니다. 이 작업을 완료하는 데 몇 분이 소요될 수 있습니다.

Parallelstore CSI 드라이버 관리

이 섹션에서는 필요한 경우 Parallelstore CSI 드라이버를 사용 설정하고 중지하는 방법을 설명합니다.

새 클러스터에서 Parallelstore CSI 드라이버 사용 설정

새 Standard 클러스터를 만들 때 Parallelstore CSI 드라이버를 사용 설정하려면 Google Cloud CLI로 다음 명령어를 실행합니다.

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --network=NETWORK_NAME \
    --addons=ParallelstoreCsiDriver \
    --cluster-version=VERSION

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터 이름
  • LOCATION: 클러스터를 포함하는 Compute Engine 영역. Parallelstore CSI 드라이버에 지원되는 영역을 지정해야 합니다.
  • NETWORK_NAME: VPC 네트워크 구성에서 만든 VPC 네트워크의 이름
  • VERSION: GKE 버전 번호. 이 기능을 사용하려면 지원되는 버전 번호를 지정해야 합니다(예: GKE 버전 1.29 이상). 또는 --release-channel 플래그를 사용하고 출시 채널을 지정하면 됩니다.

기존 클러스터에서 Parallelstore CSI 드라이버 사용 설정

기존 GKE Standard 클러스터에서 드라이버를 사용 설정하려면 Google Cloud CLI로 다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
  --location=LOCATION \
  --update-addons=ParallelstoreCsiDriver=ENABLED

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터 이름
  • LOCATION: 클러스터를 포함하는 Compute Engine 영역. Parallelstore CSI 드라이버에 지원되는 영역을 지정해야 합니다.

GKE 클러스터가 VPC 네트워크 구성에서 설정한 네트워크와 동일한 VPC 네트워크에서 실행되고 있는지 확인합니다. GKE 클러스터의 VPC 네트워크를 확인하려면 Google Cloud 콘솔에서 또는 gcloud container clusters describe $(CLUSTER) --format="value(networkConfig.network)" --location=$(LOCATION) 명령어를 통해 확인하면 됩니다.

Parallelstore CSI 드라이버 중지

Google Cloud CLI를 사용하여 기존 Autopilot 또는 Standard 클러스터에서 Parallelstore CSI 드라이버를 중지할 수 있습니다.

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --update-addons=ParallelstoreCsiDriver=DISABLED

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터 이름
  • LOCATION: 클러스터를 포함하는 Compute Engine 영역. Parallelstore CSI 드라이버에 지원되는 영역을 지정해야 합니다.

Parallelstore 볼륨에서 fsGroup 사용

Parallelstore CSI 드라이버는 마운트된 파일 시스템의 루트 수준 디렉터리 그룹 소유권을 변경하여 포드의 SecurityContext에 지정된 사용자 요청 fsGroup과 일치하도록 지원합니다. 이 기능은 GKE 클러스터 버전 1.29.5 이상 또는 버전 1.30.1 이상에서만 지원됩니다.

문제 해결

문제 해결 안내는 Parallelstore 문서의 문제 해결 페이지를 참조하세요.

다음 단계