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


이 가이드에서는 Managed Lustre CSI 드라이버를 사용하여 기존 Managed Lustre 인스턴스에 연결하는 방법을 설명합니다. 이렇게 하면 예측 가능하고 통제된 방식으로 기존의 Managed Lustre 인스턴스에 스테이트풀(Stateful) 워크로드의 볼륨으로 액세스할 수 있습니다.

시작하기 전에

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

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

환경 변수 설정

다음 환경 변수를 설정합니다.

export CLUSTER_NAME=CLUSTER_NAME
export PROJECT_ID=PROJECT_ID
export NETWORK_NAME=LUSTRE_NETWORK
export LOCATION=ZONE

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • PROJECT_ID: Trusted Cloud by S3NS 프로젝트 ID
  • LUSTRE_NETWORK: GKE 클러스터와 관리형 Lustre 인스턴스가 모두 상주하는 공유 Virtual Private Cloud 네트워크입니다.
  • ZONE: GKE 클러스터의 지리적 영역입니다(예: us-central1-a).

관리형 Lustre CSI 드라이버 구성

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

새 GKE 클러스터에서 관리형 Lustre CSI 드라이버 사용 설정

새 GKE 클러스터를 만들 때 관리형 Lustre CSI 드라이버를 사용 설정하려면 다음 단계를 따르세요.

Autopilot

gcloud container clusters create-auto "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=1.33.2-gke.1111000 \
    --enable-lustre-csi-driver \
    --enable-legacy-lustre-port

표준

gcloud container clusters create "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=1.33.2-gke.1111000 \
    --addons=LustreCsiDriver \
    --enable-legacy-lustre-port

기존 GKE 클러스터에서 관리형 Lustre CSI 드라이버 사용 설정

기존 GKE 클러스터에서 관리형 Lustre CSI 드라이버를 사용 설정하려면 다음 명령어를 사용합니다.

gcloud container clusters update ${CLUSTER_NAME} \
    --location=${LOCATION} \
    --enable-legacy-lustre-port

클러스터에서 관리형 Lustre CSI 드라이버를 사용 설정한 후 노드가 다시 생성되고 CPU 노드가Trusted Cloud 콘솔 또는 CLI 출력에서 GPU 이미지를 사용하는 것으로 표시될 수 있습니다. 예를 들면 다음과 같습니다.

config:
  imageType: COS_CONTAINERD
  nodeImageConfig:
    image: gke-1330-gke1552000-cos-121-18867-90-4-c-nvda

이는 예상되는 동작입니다. 관리형 Lustre 커널 모듈을 안전하게 설치하기 위해 CPU 노드에서 GPU 이미지가 재사용됩니다. GPU 사용량에 대한 과도한 요금이 청구되지 않습니다.

관리형 Lustre CSI 드라이버 사용 중지

Google Cloud CLI를 사용하여 기존 GKE 클러스터에서 관리형 Lustre CSI 드라이버를 사용 중지할 수 있습니다.

gcloud container clusters update ${CLUSTER_NAME} \
    --location=${LOCATION} \
    --update-addons=LustreCsiDriver=DISABLED

CSI 드라이버가 사용 중지되면 노드가 자동으로 다시 생성되고 관리형 Lustre 커널 모듈이 GKE 노드에서 제거됩니다.

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

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

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

  1. Managed Lustre 인스턴스를 참조하는 PersistentVolume을 만듭니다.
  2. PersistentVolumeClaim을 사용하여 볼륨에 액세스합니다.
  3. 볼륨을 사용하는 워크로드를 만듭니다.

PersistentVolume 만들기

  1. 관리형 Lustre 인스턴스를 찾으려면 다음 명령어를 실행하세요.

    gcloud lustre instances list \
        --project=${PROJECT_ID} \
        --location=${LOCATION}
    

    출력은 다음과 비슷하게 표시됩니다. 다음 단계로 진행하기 전에 Managed Lustre instance name, filesystem, mountPoint 필드를 기록해 두세요.

    capacityGib: '18000'
    createTime: '2025-04-28T22:42:11.140825450Z'
    filesystem: testlfs
    gkeSupportEnabled: true
    mountPoint: 10.90.1.4@tcp:/testlfs
    name: projects/my-project/locations/us-central1-a/instances/my-lustre
    network: projects/my-project/global/networks/default
    perUnitStorageThroughput: '1000'
    state: ACTIVE
    updateTime: '2025-04-28T22:51:41.559098631Z'
    
  2. lustre-pv.yaml이라는 파일에 다음 매니페스트를 저장합니다.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: lustre-pv
    spec:
      storageClassName: "STORAGE_CLASS_NAME"
      capacity:
        storage: 18000Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      claimRef:
        namespace: default
        name: lustre-pvc
      csi:
        driver: lustre.csi.storage.gke.io
        volumeHandle: "PROJECT_ID/LOCATION/INSTANCE_NAME"
      volumeAttributes:
        ip: IP_ADDRESS
        filesystem: FILESYSTEM
    

    다음을 바꿉니다.

    • storageClassName: StorageClass 이름입니다. 값은 빈 문자열일 수 있지만 PersistentVolumeClaim의 사양을 충족해야 합니다.
    • volumeHandle: 이 볼륨의 식별자입니다.
      • PROJECT_ID: Trusted Cloud by S3NS 프로젝트 ID
      • LOCATION: Lustre 인스턴스의 영역 위치입니다. 관리형 Lustre CSI 드라이버에 지원되는 영역을 지정해야 합니다.
      • INSTANCE_NAME: Lustre 인스턴스의 이름입니다.
    • ip: Lustre 인스턴스의 IP 주소입니다. 이 값은 이전 명령어의 출력에 있는 mountPoint 필드에서 가져옵니다.
    • filesystem: 관리형 Lustre 인스턴스의 파일 시스템 이름입니다.

    PersistentVolume 객체에서 지원되는 전체 필드 목록은 관리형 Lustre CSI 드라이버 참조 문서를 참고하세요.

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

    kubectl apply -f lustre-pv.yaml
    

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

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

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

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

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: lustre-pvc
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: "STORAGE_CLASS_NAME"
        volumeName: lustre-pv
        resources:
          requests:
            storage: STORAGE_SIZE
    

    STORAGE_SIZE을 스토리지 크기로 바꿉니다(예: 18000Gi). PersistentVolume의 사양과 일치해야 합니다.

  2. 다음 명령어를 실행하여 PersistentVolumeClaim을 만듭니다.

      kubectl create -f lustre-pvc.yaml
    

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

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

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

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

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

      kubectl apply -f my-pod.yaml
    

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

  3. Pod가 실행 중인지 확인합니다.

      kubectl get pods
    

    포드가 Running 상태에 도달하는 데 몇 분 정도 걸릴 수 있습니다.

    출력은 다음과 비슷합니다.

      NAME           READY   STATUS    RESTARTS   AGE
      my-pod         1/1     Running   0          11s
    

Managed Lustre 볼륨에서 fsGroup 사용

마운트된 파일 시스템의 루트 수준 디렉터리의 그룹 소유권을 변경하여 포드의 SecurityContext에 지정된 사용자 요청 fsGroup과 일치하도록 할 수 있습니다.

문제 해결

문제 해결 안내는 관리형 Lustre 문서의 문제 해결 페이지를 참고하세요.

삭제

Trusted Cloud by S3NS 계정에 비용이 청구되지 않도록 하려면 이 가이드에서 만든 스토리지 리소스를 삭제합니다.

  1. 포드와 PersistentVolumeClaim을 삭제합니다.

    kubectl delete pod my-pod
    kubectl delete pvc lustre-pvc
    
  2. PersistentVolume 상태를 확인합니다. 포드와 PersistentVolumeClaim을 삭제한 후 PersistentVolume은 'Released' 상태를 보고해야 합니다.

    kubectl get pv
    

    출력은 다음과 비슷합니다.

    NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                 STORAGECLASS   REASON   AGE
    lustre-pv   18000Gi      RWX            Retain        Released   default/preprov-pvc                           2m28s
    
  3. PersistentVolume을 재사용합니다. PersistentVolume을 재사용하려면 클레임 참조 (claimRef)를 삭제합니다.

    kubectl patch pv lustre-pv --type json -p '[{"op": "remove", "path": "/spec/claimRef"}]'
    

    이제 PersistentVolume이 'Available' 상태를 보고하여 새 PersistentVolumeClaim에 바인딩될 준비가 되었음을 나타냅니다. PersistentVolume 상태를 확인합니다.

    kubectl get pv
    

    출력은 다음과 비슷합니다.

    NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    lustre-pv   18000Gi      RWX           Retain         Available                                   19m
    
  4. 더 이상 필요하지 않은 PersistentVolume을 삭제합니다. PersistentVolume이 더 이상 필요하지 않으면 삭제합니다.

    kubectl delete pv lustre-pv
    

    PersistentVolume을 삭제해도 기본 Managed Lustre 인스턴스는 삭제되지 않습니다.

다음 단계