이 가이드에서는 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
를 실행하여 최신 버전을 가져옵니다.
- 제한사항 및 요구사항은 [CSI 드라이버 개요]를 참고하세요.
- 관리형 Lustre CSI 드라이버를 사용 설정해야 합니다. Standard 및 Autopilot 클러스터에서는 기본적으로 사용 중지되어 있습니다.
환경 변수 설정
다음 환경 변수를 설정합니다.
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 프로젝트 IDLUSTRE_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 인스턴스에 액세스하는 일반적인 프로세스를 설명합니다.
- Managed Lustre 인스턴스를 참조하는 PersistentVolume을 만듭니다.
- PersistentVolumeClaim을 사용하여 볼륨에 액세스합니다.
- 볼륨을 사용하는 워크로드를 만듭니다.
PersistentVolume 만들기
관리형 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'
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 드라이버 참조 문서를 참고하세요.
다음 명령어를 실행하여 PersistentVolume을 만듭니다.
kubectl apply -f lustre-pv.yaml
PersistentVolumeClaim을 사용하여 볼륨에 액세스
Managed Lustre CSI 드라이버의 StorageClass를 참조하는 PersistentVolumeClaim 리소스를 만들 수 있습니다.
다음 매니페스트 파일에서는 앞에서 만든 StorageClass를 참조하는 ReadWriteMany
액세스 모드 에서 PersistentVolumeClaim을 만드는 방법에 대한 예시를 보여줍니다.
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의 사양과 일치해야 합니다.다음 명령어를 실행하여 PersistentVolumeClaim을 만듭니다.
kubectl create -f lustre-pvc.yaml
볼륨을 사용하는 워크로드 만들기
이 섹션에서는 앞에서 만든 PersistentVolumeClaim 리소스를 사용하는 포드를 만드는 방법을 보여줍니다.
포드 여러 개에서 같은 PersistentVolumeClaim 리소스를 공유할 수 있습니다.
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
다음 명령어를 실행하여 매니페스트를 클러스터에 적용합니다.
kubectl apply -f my-pod.yaml
포드는 GKE에서 PersistentVolumeClaim을 프로비저닝할 때까지 기다린 후 실행을 시작합니다. 이 작업을 완료하는 데 몇 분이 소요될 수 있습니다.
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 계정에 비용이 청구되지 않도록 하려면 이 가이드에서 만든 스토리지 리소스를 삭제합니다.
포드와 PersistentVolumeClaim을 삭제합니다.
kubectl delete pod my-pod kubectl delete pvc lustre-pvc
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
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
더 이상 필요하지 않은 PersistentVolume을 삭제합니다. PersistentVolume이 더 이상 필요하지 않으면 삭제합니다.
kubectl delete pv lustre-pv
PersistentVolume을 삭제해도 기본 Managed Lustre 인스턴스는 삭제되지 않습니다.