이 가이드에서는 Managed Lustre CSI 드라이버를 사용하여 기존 Managed Lustre 인스턴스에 연결하는 방법을 설명합니다. 이렇게 하면 예측 가능하고 통제된 방식으로 기존 Managed Lustre 인스턴스에 스테이트풀(Stateful) 워크로드의 볼륨으로 액세스할 수 있습니다.
고성능 네트워킹을 위한 다중 NIC 지원
버전 1.35.2-gke.1842000 이상을 실행하는 GKE 클러스터의 경우 관리형 Lustre CSI 드라이버가 기본적으로 사용 설정되어 처리량을 늘리기 위해 사용 가능한 모든 네트워크 인터페이스 카드 (NIC)를 사용합니다. 이 지원은 네트워크 인터페이스에 TCP 스토리지 트래픽을 분산하여 대역폭을 집계합니다.
다중 NIC 지원을 사용하려면 노드가 다음 요구사항을 충족해야 합니다.
- TCP용 표준 NIC: 노드에서 TCP 스토리지 트래픽을 처리하려면 Google 가상 NIC (gVNIC) 또는 VirtIO-Net과 같은 표준 NIC를 사용해야 합니다.
- 동일한 VPC: 모든 표준 NIC가 동일한 VPC 네트워크에 있어야 합니다.
- RDMA 고려사항: 노드에 RDMA NIC를 연결할 수도 있지만 Managed Lustre CSI 드라이버는 TCP 스토리지 트래픽에 표준 NIC만 사용합니다.
멀티 NIC 지원을 사용 중지하려면 Lustre의 멀티 NIC 사용 중지를 참고하세요.
Lustre 통신 포트
GKE Managed Lustre CSI 드라이버는 GKE 클러스터 버전과 기존 Managed Lustre 구성에 따라 Managed Lustre 인스턴스와의 통신에 다른 포트를 사용합니다.
기본 포트(권장): 버전
1.33.2-gke.4780000이상을 실행하는 새 GKE 클러스터의 경우 드라이버는 기본적으로 Lustre 통신에 포트988을 사용합니다.기존 포트: 다음 시나리오에서
gcloud명령어에--enable-legacy-lustre-port플래그를 추가하여 포트6988을 사용합니다.- 이전 GKE 버전: GKE 클러스터에서
1.33.2-gke.4780000이전 버전을 실행하는 경우--enable-legacy-lustre-port플래그는 GKE 노드에서gke-metadata-server와의 포트 충돌을 해결합니다. - 기존 Lustre 인스턴스:
gke-support-enabled플래그로 생성된 기존 Managed Lustre 인스턴스에 연결하는 경우 클러스터 버전과 관계없이gcloud명령어에--enable-legacy-lustre-port를 포함해야 합니다. 이 플래그가 없으면 GKE 클러스터가 기존 Lustre 인스턴스를 마운트하지 못합니다.gke-support-enabled플래그에 대한 자세한 내용은 인스턴스 만들기의 선택적 플래그 설명을 참조하세요.
- 이전 GKE 버전: GKE 클러스터에서
기본 포트 988 또는 기존 포트 6988을 사용하도록 새 클러스터와 기존 클러스터를 구성할 수 있습니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Cloud Managed Lustre API 및 Google Kubernetes Engine API를 사용 설정합니다. API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면
gcloud components update명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
- 제한사항 및 요구사항은 Google Cloud 관리 Lustre CSI 드라이버 정보를 참고하세요.
- Managed 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: Google Cloud 프로젝트 IDLUSTRE_NETWORK: GKE 클러스터와 Managed Lustre 인스턴스가 모두 상주하는 공유 가상 프라이빗 클라우드 네트워크입니다.ZONE: GKE 클러스터의 지리적 영역입니다(예:us-central1-a).
Managed Lustre CSI 드라이버 구성
이 섹션에서는 Managed Lustre CSI 드라이버를 사용 설정하고 중지하는 방법을 설명합니다.
새 GKE 클러스터에서 Managed Lustre CSI 드라이버 사용 설정
다음 섹션에서는 새 GKE 클러스터에서 Managed Lustre CSI 드라이버를 사용 설정하는 방법을 설명합니다.
기본 포트 988 사용
버전 1.33.2-gke.4780000 이상을 실행하는 새 GKE 클러스터를 만들 때 Managed Lustre CSI 드라이버를 사용 설정하려면 다음 명령어를 실행합니다.
Autopilot
gcloud container clusters create-auto "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--enable-lustre-csi-driver
Standard
gcloud container clusters create "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--addons=LustreCsiDriver
기존 포트 6988 사용
1.33.2-gke.4780000 이전 버전을 실행하는 새 GKE 클러스터를 만들 때 Managed Lustre CSI 드라이버를 사용 설정하려면 다음 명령어를 실행합니다.
Autopilot
gcloud container clusters create-auto "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--enable-lustre-csi-driver \
--enable-legacy-lustre-port
Standard
gcloud container clusters create "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--addons=LustreCsiDriver \
--enable-legacy-lustre-port
기존 GKE 클러스터에서 Managed Lustre CSI 드라이버 사용 설정
다음 섹션에서는 기존 GKE 클러스터에서 Managed Lustre CSI 드라이버를 사용 설정하는 방법을 설명합니다.
기본 포트 988 사용
버전 1.33.2-gke.4780000 이상을 실행하는 기존 GKE 클러스터에서 Managed Lustre CSI 드라이버를 사용 설정하려면 다음 명령어를 실행합니다.
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--update-addons=LustreCsiDriver=ENABLED
기존 포트 6988 사용
기존 GKE 클러스터에서 Managed Lustre CSI 드라이버를 사용 설정하려면 --enable-legacy-lustre-port 플래그를 추가하여 기존 포트 6988를 사용해야 할 수 있습니다. 이 플래그는 다음 시나리오에서 필요합니다.
- GKE 클러스터가
1.33.2-gke.4780000이전 버전에서 실행되는 경우 이 클러스터를
gke-support-enabled플래그로 만든 기존 Managed Lustre 인스턴스에 연결하려는 경우gcloud container clusters update ${CLUSTER_NAME} \ --location=${LOCATION} \ --enable-legacy-lustre-port
기존 클러스터에서 노드 업그레이드 필요
기존 클러스터에서 Managed Lustre CSI 드라이버를 사용 설정하면 Managed Lustre 클라이언트에 필요한 커널 모듈을 업데이트하기 위해 노드 재생성이 트리거될 수 있습니다. 즉시 사용하려면 노드 풀을 수동으로 업그레이드하는 것이 좋습니다.
출시 채널의 GKE 클러스터는 예약된 출시 일정에 따라 업그레이드되며, 유지보수 기간에 따라 몇 주가 걸릴 수 있습니다. 정적 GKE 버전을 사용하는 경우 노드 풀을 수동으로 업그레이드해야 합니다.
노드 업그레이드가 완전히 완료될 때까지 CSI 드라이버 포드가 업데이트 대기 중인 노드에서 비정상 종료를 반복할 수 있습니다. CSI 드라이버 포드 로그에 Operation not permitted 오류가 표시되면 노드 업그레이드 또는 재생성이 필요함을 나타냅니다.
노드 풀 업그레이드 후 CPU 노드가 Google Cloud 콘솔 또는 CLI 출력에서 GPU 이미지를 사용하는 것으로 표시될 수 있습니다. 이는 예상되는 동작입니다. Managed Lustre 커널 모듈을 안전하게 설치하기 위해 CPU 노드에서 GPU 이미지가 재사용됩니다. GPU 사용량에 대한 요금이 청구되지 않습니다.
(선택사항) 다중 NIC 노드 풀 만들기
고성능 네트워킹을 사용하려면 다중 네트워크 인터페이스를 지원하는 인스턴스 유형으로 노드 풀을 만들어야 합니다. 버전 1.35.2-gke.1842000 이상을 실행하는 GKE 클러스터에서는 다중 NIC 지원이 기본적으로 사용 설정됩니다. 보조 네트워크 인터페이스가 기본 인터페이스와 동일한 VPC 네트워크 내에 있는지 확인합니다.
다음 명령어를 실행합니다.
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--machine-type=MACHINE_TYPE \
--enable-gvnic \
--additional-node-network network=NETWORK_NAME,subnetwork=SECONDARY_SUBNET
다음을 바꿉니다.
NODE_POOL_NAME: 노드 풀의 이름입니다.CLUSTER_NAME: 클러스터 이름입니다.LOCATION: 클러스터의 리전 또는 영역입니다.MACHINE_TYPE: 노드 풀의 머신 유형입니다(예: 고성능을 위해 다중 NIC와 함께 자주 사용되는a3-megagpu-8g). 멀티 NIC는 모든 머신 유형에서 지원됩니다.NETWORK_NAME: VPC 네트워크 이름SECONDARY_SUBNET: 보조 서브넷의 이름입니다.
Lustre에서 멀티 NIC 사용 중지
고성능 워크로드에는 다중 NIC 지원이 권장되지만 특정 시나리오에서는 사용 중지하는 것이 좋습니다. 예를 들어 사용 가능한 모든 하드웨어 인터페이스에 Lustre 트래픽을 분산하지 않거나 문제 해결을 위해 연결 문제를 단일 네트워크 경로로 격리해야 할 수 있습니다.
참고: 실행 중인 노드에서 다중 NIC 지원을 사용 중지하는 경우 이 변경사항을 적용하려면 노드 풀을 다시 만들거나 노드 풀을 수동으로 업그레이드해야 할 수 있습니다.
클러스터의 경우
전체 클러스터에 대해 고성능 네트워킹을 사용 중지하려면 클러스터를 만들거나 업데이트할 때 --disable-multi-nic-lustre 플래그를 사용합니다. 예를 들면 다음과 같습니다.
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--disable-multi-nic-lustre
다음을 바꿉니다.
CLUSTER_NAME: 클러스터 이름입니다.LOCATION: 클러스터의 리전 또는 영역입니다.
노드 풀의 경우
특정 노드 풀의 고성능 네트워킹을 사용 중지하려면 노드 풀을 업데이트하여 lustre.csi.storage.gke.io/multi-nic 라벨을 false로 설정하세요.
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--zone=LOCATION \
--node-labels=lustre.csi.storage.gke.io/multi-nic=false
다음을 바꿉니다.
NODE_POOL_NAME: 노드 풀의 이름입니다.CLUSTER_NAME: 클러스터 이름입니다.LOCATION: 클러스터의 영역입니다.
Managed Lustre CSI 드라이버 사용 중지
Google Cloud CLI를 사용하여 기존 GKEcluster에서 Managed Lustre CSI 드라이버를 사용 중지할 수 있습니다.
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--update-addons=LustreCsiDriver=DISABLED
CSI 드라이버가 사용 중지되면 GKE는 노드를 자동으로 다시 만들고 Managed Lustre 커널 모듈을 제거합니다.
Managed Lustre CSI 드라이버를 사용하여 기존 Managed Lustre 인스턴스에 액세스
GKE 클러스터와 동일한 네트워크 내에 Managed Lustre 인스턴스를 이미 프로비저닝한 경우 다음 안내에 따라 인스턴스를 참조하는 PersistentVolume을 정적으로 프로비저닝할 수 있습니다.
다음 섹션에서는 Managed Lustre CSI 드라이버를 사용하여 기존 Managed Lustre 인스턴스에 액세스하는 일반적인 프로세스를 설명합니다.
- Managed Lustre 인스턴스를 참조하는 PersistentVolume을 만듭니다.
- PersistentVolumeClaim을 사용하여 볼륨에 액세스합니다.
- 볼륨을 사용하는 워크로드를 만듭니다.
PersistentVolume 만들기
관리형 Lustre 인스턴스를 찾으려면 다음 명령어를 실행합니다.
gcloud lustre instances list \ --project=${PROJECT_ID} \ --location=${LOCATION}출력은 다음과 비슷하게 표시됩니다. 다음 단계로 진행하기 전에 Managed Lustre 인스턴스 이름, filesystem, mountPoint 필드를 기록해 두세요.
capacityGib: '9000' 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: 9000Gi 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: Google Cloud 프로젝트 ID
- LOCATION: Lustre 인스턴스의 영역 위치입니다. Managed Lustre CSI 드라이버에 지원되는 영역을 지정해야 합니다.
- INSTANCE_NAME: Lustre 인스턴스의 이름입니다.
ip: Lustre 인스턴스의 IP 주소입니다. 이 값은 이전 명령어의 출력에 있는mountPoint필드에서 가져옵니다.filesystem: 관리형 Lustre 인스턴스의 파일 시스템 이름입니다.
PersistentVolume 객체에서 지원되는 필드의 전체 목록은 Managed 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_SIZESTORAGE_SIZE을 스토리지 크기로 바꿉니다(예:
9000Gi). 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과 일치하도록 할 수 있습니다.
문제 해결
문제 해결 안내는 Managed Lustre 문서의 문제 해결 페이지를 참고하세요.
삭제
Google Cloud 계정에 비용이 청구되지 않게 하려면 이 가이드에서 만든 스토리지 리소스를 삭제합니다.
포드와 PersistentVolumeClaim을 삭제합니다.
kubectl delete pod my-pod kubectl delete pvc lustre-pvcPersistentVolume 상태를 확인합니다. 포드와 PersistentVolumeClaim을 삭제한 후 PersistentVolume은 'Released' 상태를 보고해야 합니다.
kubectl get pv출력은 다음과 비슷합니다.
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE lustre-pv 9000Gi RWX Retain Released default/preprov-pvc 2m28sPersistentVolume을 재사용합니다. 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 9000Gi RWX Retain Available 19m더 이상 필요하지 않은 PersistentVolume을 삭제합니다. PersistentVolume이 더 이상 필요하지 않으면 삭제합니다.
kubectl delete pv lustre-pvPersistentVolume을 삭제해도 기본 Managed Lustre 인스턴스는 삭제되지 않습니다.