Google Cloud Managed Lustre는 Cloud Storage에서 데이터를 가져오고 Cloud Storage로 데이터를 내보낼 수 있습니다. 데이터 전송은 증분 방식입니다. 대상에 아직 없거나 전송된 이후 변경된 파일만 복사합니다.
계층적 네임스페이스가 사용 설정된 Cloud Storage 버킷은 표준 버킷에 비해 Managed Lustre와의 전송 속도가 더 빠릅니다.
제한사항
인스턴스당 하나의 전송 작업만 한 번에 활성화할 수 있습니다. 이전 전송이 아직 실행 중인 상태에서 두 번째 전송 작업을 시작하려고 하면 다음과 같은 오류가 발생합니다.
ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation
Cloud Storage 이그레스 대역폭 고려사항
Cloud Storage는 리전별 프로젝트당 최대 200Gbps의 기본 이그레스 대역폭을 제공합니다. 워크로드에 더 빠른 데이터 전송 속도가 필요한 경우 이그레스 대역폭 한도 상향을 요청할 수 있습니다. 자세한 내용은 Cloud Storage 대역폭 할당량을 참고하세요.
필수 권한
이전을 시작할 수 있는 권한
전송을 시작하는 데 사용되는 사용자 또는 서비스 계정에는 다음 권한이 필요합니다.
lustre.instances.exportData를 사용하여 관리 Lustre에서 Cloud Storage로 전송합니다.- Cloud Storage에서 전송하려면
lustre.instances.importData를 사용하세요.
이러한 권한은 모두 roles/lustre.admin 역할에 부여됩니다. 커스텀 역할을 만들어 권한을 독립적으로 부여할 수 있습니다.
관리형 Lustre 서비스 에이전트 권한
Managed Lustre 서비스 에이전트 가져오기
Managed Lustre 서비스 에이전트는 프로젝트에서 Managed Lustre 인스턴스를 처음 만들 때 생성됩니다. 서비스 에이전트 ID는 service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com 형식입니다.
Managed Lustre 서비스 에이전트가 아직 없는 경우
services identity create명령어를 실행합니다.gcloud beta services identity create \ --service=lustre.googleapis.com \ --project=PROJECT_NUMBER_OR_IDPROJECT_NUMBER_OR_ID를 관리형 Lustre 인스턴스를 만들려는 프로젝트의 번호 또는 ID로 바꿉니다. 출력은 다음과 비슷합니다.
Service identity created: service-1234567890@gcp-sa-lustre.iam.gserviceaccount.com다음 단계에서 사용할 서비스 에이전트 ID의 값을 복사합니다.
이미 Managed Lustre 인스턴스를 만든 경우
서비스 에이전트 ID를 구성하려면 프로젝트 번호를 가져옵니다. PROJECT_NUMBER는 프로젝트 ID와 다릅니다.
- 프로젝트 ID는 문자, 숫자, 하이픈의 조합으로 구성될 수 있는 고유한 문자열입니다. 프로젝트를 만들 때 프로젝트 ID를 지정합니다. 예를 들면
example-project-123입니다. - 프로젝트 번호는 숫자로만 구성된 프로젝트의 자동 생성 고유 식별자입니다. 예를 들면
1234567890입니다.
특정 프로젝트 ID의 PROJECT_NUMBER를 가져오려면
gcloud projects describe명령어를 사용합니다.gcloud projects describe PROJECT_ID --format="value(projectNumber)"- 프로젝트 ID는 문자, 숫자, 하이픈의 조합으로 구성될 수 있는 고유한 문자열입니다. 프로젝트를 만들 때 프로젝트 ID를 지정합니다. 예를 들면
반환된 프로젝트 번호를 서비스 에이전트 ID에 복사합니다.
service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com다음 단계에서 사용할 서비스 에이전트 ID를 복사합니다.
권한 부여
Managed Lustre 서비스 에이전트에는 다음 Cloud Storage 역할 중 하나가 필요합니다.
- Cloud Storage 간에 데이터를 전송하려면 Cloud Storage 버킷에 대한
roles/storage.objectUser권한이 있어야 합니다. - Cloud Storage에서만 전송하려면 Cloud Storage 버킷에
roles/storage.objectViewer이 있어야 합니다.
이러한 역할 중 하나를 부여하려면 다음 gcloud 명령어를 실행합니다.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_AGENT_IDENTITY \
--role=roles/storage.objectViewer_OR_objectUser
SERVICE_AGENT_IDENTITY은 이전 단계의 관리형 Lustre 서비스 에이전트 ID입니다.
Managed Lustre로 데이터 가져오기
Cloud Storage 버킷에서 데이터를 가져올 수 있습니다. 버킷은 동일한 프로젝트에 있거나 다른 프로젝트에 있을 수 있습니다. 버킷은 관리형 Lustre 인스턴스와 다른 영역이나 리전에 있을 수 있지만 리전 간 전송은
리전 내 전송보다 느릴 수 있습니다.
gcloud
gcloud lustre instances import-data INSTANCE_ID \
--location=LOCATION \
--gcs-path-uri=gs://BUCKET_NAME/ \
--lustre-path=PS_PATH
각 항목의 의미는 다음과 같습니다.
- INSTANCE_ID은 Managed Lustre 인스턴스 이름입니다.
--location은 Managed Lustre 인스턴스의 영역입니다. 예를 들면us-central1-a입니다.--gcs-path-uri는gs://<bucket_name>/<optional_path_inside_bucket>/형식을 사용하여 Cloud Storage 버킷의 URI 또는 버킷 내 경로를 지정합니다. 버킷 내부의 경로가 지정된 경우 슬래시 (/)로 끝나야 합니다.--lustre-path는 관리형 Lustre 파일 시스템의 루트 디렉터리 경로를 지정합니다./로 시작해야 합니다. 기본값은/입니다. 기본값이 아닌 값을 지정하는 경우 디렉터리가 파일 시스템에 이미 있어야 합니다.
다음 매개변수는 선택사항입니다.
--request-id를 사용하면 이 요청에 고유 ID를 할당할 수 있습니다. 동일한 요청 ID를 사용하여 이 요청을 다시 시도하면 이미 완료된 경우 서버가 해당 요청을 무시합니다. 모두 0이 아닌 유효한 UUID여야 합니다.--async는 작업이 완료되기를 기다리지 않고 즉시 응답을 반환합니다.
자세한 내용은 Cloud SDK 문서를 참고하세요.
REST
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData
Authorization: Bearer [YOUR_ACCESS_TOKEN]
{
"gcsPath" : {
"uri" : "gs://BUCKET_NAME/"
},
"lustrePath" : {
"path" : "/PATH"
}
}
각 항목의 의미는 다음과 같습니다.
- PROJECT_ID은 Google Cloud 프로젝트 이름입니다.
- LOCATION은 관리형 Lustre 인스턴스의 영역입니다. 예를 들면
us-central1-a입니다. - INSTANCE_ID은 Managed Lustre 인스턴스 이름입니다.
gcsPath에는 값이gs://<bucket_name>/<optional_path_inside_bucket>/형식을 사용하여 Cloud Storage 버킷의 URI 또는 버킷 내 경로를 지정하는uri키가 포함됩니다. 버킷 내부의 경로가 지정된 경우 슬래시 (/)로 끝나야 합니다.lustrePath에는 값이 관리 Lustre 파일 시스템의 루트 디렉터리 경로를 지정하는path키가 포함되어 있습니다./로 시작해야 합니다. 기본값은/입니다. 기본값 이외의 값을 지정하는 경우 디렉터리가 파일 시스템에 이미 있어야 합니다.
Google 관리 서비스 에이전트 대신 자체 서비스 계정을 사용하려면 요청에서 JSON 객체의 serviceAccount 필드를 지원해야 합니다.
"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"
curl 명령어 예시는 다음과 같습니다.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData \
-d '{"gcsPath": {"uri":"gs://BUCKET_NAME/"}, "lustrePath": {"path":"/"}}'
파일 속성
Cloud Storage 버킷에서 관리형 Lustre 인스턴스로 데이터를 가져올 때 관리형 Lustre 인스턴스의 파일 속성은 다음 두 가지 방법 중 하나로 설정됩니다.
- Cloud Storage 객체에 데이터 내보내기에 설명된 대로 맞춤 메타데이터가 있는 경우 다음이 적용됩니다.
- 파일의 UID, GID, 모드,
mtime는 객체의 맞춤 메타데이터를 기반으로 설정됩니다. - 파일의
atime이mtime과 동일한 값으로 설정됩니다.
- 파일의 UID, GID, 모드,
- Cloud Storage 객체에 맞춤 메타데이터가 없는 경우 다음이 적용됩니다.
- 파일의 UID와 GID가 0 (
root)으로 설정됩니다. - 파일의 모드가
rwxr-xr-x(755)로 설정됩니다. - 파일의
atime및mtime은 Cloud Storage 객체의 생성 시간으로 설정됩니다.
- 파일의 UID와 GID가 0 (
어떤 경우든 다음을 충족해야 합니다.
- 파일의
ctime은 파일이 인스턴스에 기록된 시간으로 설정됩니다. - 디렉터리의
atime,ctime,mtime은 인스턴스에서 디렉터리가 생성된 시간으로 설정됩니다.
데이터 내보내기
관리형 Lustre 인스턴스에서 동일한 프로젝트 또는 다른 프로젝트의 Cloud Storage 버킷으로 데이터를 내보낼 수 있습니다. 버킷은 관리형 Lustre 인스턴스와 다른 영역 또는 리전에 있을 수 있지만 리전 간 전송은 리전 내 전송보다 느릴 수 있습니다.
gcloud
gcloud lustre instances export-data \
INSTANCE_ID \
--location=LOCATION \
--gcs-path-uri="gs://BUCKET_NAME/" \
--lustre-path="/"
각 항목의 의미는 다음과 같습니다.
- INSTANCE_ID은 Managed Lustre 인스턴스 이름입니다.
--location은 관리형 Lustre 인스턴스의 영역입니다. 예를 들면us-central1-a입니다.--gcs-path-uri는gs://<bucket_name>/<optional_path_inside_bucket>/형식을 사용하여 Cloud Storage 버킷의 URI 또는 버킷 내 경로를 지정합니다. 버킷 내부의 경로가 지정된 경우 슬래시 (/)로 끝나야 합니다.--lustre-path는 관리형 Lustre 파일 시스템의 루트 디렉터리 경로를 지정합니다./로 시작해야 합니다. 기본값은/입니다.
다음 매개변수는 선택사항입니다.
--request-id를 사용하면 이 요청에 고유 ID를 할당할 수 있습니다. 동일한 요청 ID를 사용하여 이 요청을 다시 시도하면 이미 완료된 경우 서버가 해당 요청을 무시합니다. 모두 0이 아닌 유효한 UUID여야 합니다.--async는 작업이 완료되기를 기다리지 않고 즉시 응답을 반환합니다.
REST
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData
Authorization: Bearer [YOUR_ACCESS_TOKEN]
{
"lustrePath" : {
"path" : "/"
},
"gcsPath" : {
"uri" : "gs://BUCKET_NAME/"
}
}
각 항목의 의미는 다음과 같습니다.
- PROJECT_ID은 Google Cloud 프로젝트 이름입니다.
- INSTANCE_ID은 Managed Lustre 인스턴스 이름입니다.
- LOCATION은 관리형 Lustre 인스턴스의 영역입니다. 예를 들면
us-central1-a입니다. lustrePath에는 값이 관리 Lustre 파일 시스템의 루트 디렉터리 경로를 지정하는path키가 포함되어 있습니다./로 시작해야 합니다. 기본값은/입니다.gcsPath에는 값이gs://<bucket_name>/<optional_path_inside_bucket>/형식을 사용하여 Cloud Storage 버킷의 URI 또는 버킷 내 경로를 지정하는uri키가 포함됩니다. 버킷 내부의 경로가 지정된 경우 슬래시 (/)로 끝나야 합니다.
Google 관리 서비스 에이전트 대신 자체 서비스 계정을 사용하려면 요청에서 JSON 객체의 serviceAccount 필드를 지원해야 합니다.
"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"
curl 명령어 예시는 다음과 같습니다.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json"
https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData \
-d '{"lustrePath": {"path":"/"}, "gcsPath": {"uri":"gs://BUCKET_NAME/"}}'
파일 속성
관리형 Lustre 인스턴스에서 Cloud Storage 버킷으로 데이터를 내보낼 때 다음 파일 속성은 Cloud Storage에서 맞춤 메타데이터로 유지됩니다.
- 파일의 UID는
goog-reserved-posix-uid키와 함께 저장됩니다. - 파일의 GID는
goog-reserved-posix-gid키와 함께 저장됩니다. - 파일의 숫자 모드는
goog-reserved-posix-mode키와 함께 저장됩니다. - 파일의
mtime은goog-reserved-file-mtime키로 저장됩니다.
이러한 맞춤 메타데이터 키 이름은 POSIX 파일 시스템을 사용한 전송에 Storage Transfer Service에서 사용하는 이름과 동일합니다.
다음 파일 속성은 보존되지 않습니다.
- 심볼릭 링크는 보존되지 않습니다.
- 하드 링크는 별도의 Cloud Storage 객체로 내보내지므로 여러 사본이 생성됩니다.
lfs setstripe또는lfs setdirstripe를 사용하여 명시적으로 설정된 광택 스트라이핑은 유지되지 않습니다.- 파일의
atime및ctime이 보존되지 않습니다. - 디렉터리의
mtime은 보존되지 않습니다. - 빈 디렉터리는 보존되지 않습니다.
작업 가져오기
가져오기 또는 내보내기 작업의 상태를 확인하려면 작업 ID가 필요합니다. 이 ID는 가져오기 또는 내보내기 요청을 할 때 서비스에서 반환되며 다음 형식을 사용합니다.
operation-1234567890123-6127783ad26ea-88913969-02748053
gcloud
gcloud lustre operations describe OPERATION_ID \
--location=LOCATION
REST
GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
Authorization: Bearer [YOUR_ACCESS_TOKEN]
curl 명령어 예시는 다음과 같습니다.
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
작업 취소
가져오기 또는 내보내기 작업을 취소하려면 작업 ID가 필요합니다. 이 ID는 가져오기 또는 내보내기 요청을 할 때 서비스에서 반환되며 다음 형식을 사용합니다.
operation-1234567890123-6127783ad26ea-88913969-02748053
gcloud
gcloud lustre operations cancel OPERATION_ID \
--location=LOCATION
REST
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel
Authorization: Bearer [YOUR_ACCESS_TOKEN]
curl 명령어 예시는 다음과 같습니다.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel