이 가이드에서는 동적 프로비저닝을 사용하여 GKE에서 관리형 Lustre CSI 드라이버가 지원하는 새 Kubernetes 볼륨을 만드는 방법을 설명합니다. Managed Lustre CSI 드라이버를 사용하면 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 IP_RANGE_NAME=LUSTRE_IP_RANGE
export FIREWALL_RULE_NAME=LUSTRE_FIREWALL_RULE
export LOCATION=ZONE
다음을 바꿉니다.
CLUSTER_NAME
: 클러스터의 이름입니다.PROJECT_ID
: Trusted Cloud by S3NS 프로젝트 IDLUSTRE_NETWORK
: GKE 클러스터와 관리형 Lustre 인스턴스가 모두 상주하는 공유 가상 프라이빗 클라우드 (VPC) 네트워크입니다.LUSTRE_IP_RANGE
: 관리형 Lustre와의 VPC 네트워크 피어링을 위해 생성된 IP 주소 범위의 이름입니다.LUSTRE_FIREWALL_RULE
: IP 주소 범위의 TCP 트래픽을 허용하는 방화벽 규칙의 이름입니다.ZONE
: GKE 클러스터의 지리적 영역입니다(예:us-central1-a
).
VPC 네트워크 설정
관리형 Lustre 인스턴스와 GKE 클러스터를 만들 때 동일한 VPC 네트워크를 지정해야 합니다.
서비스 네트워킹을 사용 설정하려면 다음 명령어를 실행합니다.
gcloud services enable servicenetworking.googleapis.com \ --project=${PROJECT_ID}
VPC 네트워크 만들기
--mtu
플래그를8896
로 설정하면 성능이 10% 향상됩니다.gcloud compute networks create ${NETWORK_NAME} \ --subnet-mode=auto --project=${PROJECT_ID} \ --mtu=8896
IP 주소 범위를 만듭니다.
gcloud compute addresses create ${IP_RANGE_NAME} \ --global \ --purpose=VPC_PEERING \ --prefix-length=20 \ --description="Managed Lustre VPC Peering" \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID}
이전 단계에서 만든 범위와 연결된 CIDR 범위를 가져옵니다.
CIDR_RANGE=$( gcloud compute addresses describe ${IP_RANGE_NAME} \ --global \ --format="value[separator=/](address, prefixLength)" \ --project=${PROJECT_ID} )
만든 IP 주소 범위의 TCP 트래픽을 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \ --allow=tcp:988,tcp:6988 \ --network=${NETWORK_NAME} \ --source-ranges=${CIDR_RANGE} \ --project=${PROJECT_ID}
프로젝트의 네트워크 피어링을 설정하려면 필요한 IAM 권한(특히
compute.networkAdmin
또는servicenetworking.networksAdmin
역할)이 있는지 확인하세요.- Trusted Cloud 콘솔 > IAM 및 관리자로 이동한 다음 프로젝트 소유자 주 구성원을 검색합니다.
- 연필 아이콘을 클릭한 다음 + 다른 역할 추가를 클릭합니다.
- Compute 네트워크 관리자 또는 서비스 네트워킹 관리자를 선택합니다.
- 저장을 클릭합니다.
피어링을 연결합니다.
gcloud services vpc-peerings connect \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID} \ --ranges=${IP_RANGE_NAME} \ --service=servicenetworking.googleapis.com
관리형 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
enable-legacy-lustre-port
플래그가 지정되면 CSI 드라이버는 포트 6988을 사용하도록 LNet
(관리형 Lustre 커널 모듈의 가상 네트워크 레이어)을 구성합니다. 이 플래그는 GKE 노드에서 gke-metadata-server
와의 포트 충돌을 해결하는 데 필요합니다.
기존 GKE 클러스터에서 관리형 Lustre CSI 드라이버 사용 설정
기존 GKE 클러스터에서 관리형 Lustre CSI 드라이버를 사용 설정하려면 다음 명령어를 사용합니다.
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--enable-legacy-lustre-port
관리 Lustre CSI 드라이버를 사용 설정하면 관리 Lustre 클라이언트에 필요한 커널 모듈을 업데이트하기 위해 노드 재생이 트리거될 수 있습니다. 즉시 사용하려면 노드 풀을 수동으로 업그레이드하는 것이 좋습니다.
출시 채널의 GKE 클러스터는 예약된 출시 일정에 따라 업그레이드되며, 유지관리 기간에 따라 몇 주가 걸릴 수 있습니다. 정적 GKE 버전을 사용하는 경우 노드 풀을 수동으로 업그레이드해야 합니다.
노드 풀 업그레이드 후 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를 사용하여 기존 GKEcluster에서 관리형 Lustre CSI 드라이버를 사용 중지할 수 있습니다.
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--update-addons=LustreCsiDriver=DISABLED
CSI 드라이버가 사용 중지되면 GKE는 노드를 자동으로 다시 만들고 관리형 Lustre 커널 모듈을 제거합니다.
관리형 Lustre CSI 드라이버를 사용하여 새 볼륨 만들기
다음 섹션에서는 GKE에서 관리형 Lustre 인스턴스가 지원하는 Kubernetes 볼륨을 만드는 일반적인 프로세스를 설명합니다.
StorageClass 만들기
관리형 Lustre CSI 드라이버가 사용 설정되면 GKE는 관리형 Lustre 인스턴스를 프로비저닝할 수 있도록 StorageClass를 자동으로 만듭니다. StorageClass는 관리형 Lustre 성능 등급에 따라 달라집니다. GKE이며 다음 중 하나입니다.
lustre-rwx-125mbps-per-tib
lustre-rwx-250mbps-per-tib
lustre-rwx-500mbps-per-tib
lustre-rwx-1000mbps-per-tib
GKE는 지원되는 각 관리 Lustre 성능 등급에 기본 StorageClass를 제공합니다. 이렇게 하면 자체 StorageClass를 정의하지 않고도 기본 제공 StorageClass를 사용할 수 있으므로 관리 Lustre 인스턴스의 동적 프로비저닝이 간소화됩니다.
영역 클러스터의 경우 CSI 드라이버는 클러스터와 동일한 영역에 관리형 Lustre 인스턴스를 프로비저닝합니다. 리전 클러스터의 경우 리전 내 영역 중 하나에 인스턴스를 프로비저닝합니다.
다음 예시에서는 특정 토폴로지 요구사항이 있는 맞춤 StorageClass를 만드는 방법을 보여줍니다.
lustre-class.yaml
이라는 파일에 다음 매니페스트를 저장합니다.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: lustre-class provisioner: lustre.csi.storage.gke.io volumeBindingMode: Immediate reclaimPolicy: Delete parameters: perUnitStorageThroughput: "1000" network: LUSTRE_NETWORK allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: - us-central1-a
StorageClass에서 지원되는 필드의 전체 목록은 관리형 Lustre CSI 드라이버 참조 문서를 참고하세요.
다음 명령어를 실행하여 StorageClass를 만듭니다.
kubectl apply -f lustre-class.yaml
PersistentVolumeClaim을 사용하여 볼륨에 액세스
이 섹션에서는 관리형 Lustre CSI 드라이버의 StorageClass를 참조하는 PersistentVolumeClaim 리소스를 만드는 방법을 보여줍니다.
lustre-pvc.yaml
이라는 파일에 다음 매니페스트를 저장합니다.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: lustre-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 18000Gi storageClassName: lustre-class
PersistentVolumeClaim에서 지원되는 전체 필드 목록은 관리형 Lustre CSI 드라이버 참조 문서를 참고하세요.
다음 명령어를 실행하여 PersistentVolumeClaim을 만듭니다.
kubectl apply -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
Pod가 실행 중인지 확인합니다. 포드는 PersistentVolumeClaim이 프로비저닝된 후에 실행됩니다. 이 작업을 완료하려면 몇 분 정도 걸릴 수 있습니다.
kubectl get pods
출력은 다음과 비슷합니다.
NAME READY STATUS RESTARTS AGE my-pod 1/1 Running 0 11s
Managed Lustre 볼륨에서 fsGroup 사용
마운트된 파일 시스템의 루트 수준 디렉터리 그룹 소유권을 변경하여 포드의 SecurityContext에 지정된 사용자 요청 fsGroup과 일치하도록 할 수 있습니다. fsGroup은 마운트된 전체 관리 Lustre 파일 시스템의 소유권을 재귀적으로 변경하지 않습니다. 마운트 지점의 루트 디렉터리만 영향을 받습니다.
문제 해결
문제 해결 안내는 Managed Lustre 문서의 문제 해결 페이지를 참고하세요.
삭제
Trusted Cloud by S3NS 계정에 비용이 청구되지 않도록 하려면 이 가이드에서 만든 스토리지 리소스를 삭제합니다.
포드와 PersistentVolumeClaim을 삭제합니다.
kubectl delete pod my-pod kubectl delete pvc lustre-pvc
PersistentVolume 상태를 확인합니다.
kubectl get pv
출력은 다음과 비슷합니다.
No resources found
기본 관리 Lustre 인스턴스가 완전히 삭제되는 데 몇 분 정도 걸릴 수 있습니다.