서비스와 함께 블록 저장소 볼륨 사용하기¶
Snowflake는 컨테이너화된 애플리케이션을 위해 Snowflake 내부 스테이지, 로컬 리포지토리, 메모리 저장소 볼륨, 블록 리포지토리 볼륨의 저장소 볼륨 유형을 지원합니다.
서비스 사양에서 블록 저장소 지정하기¶
블록 저장소를 사용하는 서비스(작업 서비스 포함)를 생성하려면 다음과 같이 서비스 사양에 필요한 구성을 제공합니다.
spec.volumes
필드를 지정하여 생성할 블록 저장소 볼륨을 정의합니다.volumes: - name: <name> source: block size: <size-in-Gi> blockConfig: # optional initialContents: fromSnapshot: <snapshot-name> iops: <number-of-operations> throughput: <MiB-per-second> encryption: SNOWFLAKE_SSE | SNOWFLAKE_FULL
다음 필드는 필수입니다.
name
: 볼륨의 이름입니다.source
: 볼륨의 유형입니다. 블록 저장소 볼륨의 경우 값은block
입니다.size
: 블록 저장소 용량을 바이트 단위로 측정한 값입니다. 값은 항상 Gi 단위 접미사를 사용하여 지정된 정수여야 합니다. 예를 들어,5Gi
는5*1024*1024*1024
바이트를 의미합니다. 클라우드 공급자의 크기 값 범위는 다음과 같습니다.AWS 및 Azure의 경우
1Gi
~16384Gi
.Google Cloud의 경우
4Gi
~16384Gi
.
선택 사항 필드는 다음과 같습니다.
blockConfig.initialContents.fromSnapshot
: 이전에 생성한 다른 볼륨의 스냅샷을 지정하여 블록 볼륨을 초기화합니다. 스냅샷 이름은 정규화된 오브젝트 식별자 (예:TUTORIAL_DB.DATA_SCHEMA.MY_SNAPSHOT
)일 수 있습니다. 또한, 스냅샷 이름은 데이터베이스와 서비스의 스키마를 기준으로 확인됩니다. 예를 들어,TUTORIAL_DB.DATA_SCHEMA
에서 서비스를 생성한 경우fromSnapshot: MY_SNAPSHOT
은fromSnapshot: TUTORIAL_DB.DATA_SCHEMA.MY_SNAPSHOT
과 동일합니다.다음 사항을 참고하십시오.
스냅샷이 CREATED 상태여야 볼륨 생성에 사용할 수 있으며, 그렇지 않으면 서비스 생성에 실패합니다.
스냅샷의 암호화 유형은 생성 중인 볼륨의 암호화 유형과 일치해야 합니다.
DESCRIBE SNAPSHOT 명령을 사용하여 스냅샷의 상태와 암호화 유형을 확인합니다.
blockConfig.iops
: 초당 지원되는 최대 입력/출력 작업 수를 지정합니다. 작업당 데이터 크기는 256KiB로 제한됩니다.AWS: 지원되는 범위는 3000~16000이며 기본값은 3000입니다.
Azure: 지원되는 범위는 3000~80000이며 기본값은 3000입니다.
Google Cloud:
Google Cloud CPU 인스턴스: 지원되는 범위는 2000~160000이며 기본값은 다음과 같습니다.
4 Gi 디스크 크기의 경우 2000 IOPS
5 Gi 디스크 크기의 경우 2500 IOPS
기타 모든 디스크 크기의 경우 3000 IOPS
Google Cloud GPU 인스턴스: 처리량만 지정하는 것이 좋습니다. Google Cloud의 GPU 인스턴스에 대해
blockConfig.iops
는 16 *blockConfig.throughput
이어야 합니다.
blockConfig.throughput
: 볼륨에 프로비저닝할 최대 처리량(MiB/초)을 지정합니다.AWS: 지원되는 범위는 125~1000이며 기본값은 125입니다.
Azure: 지원되는 범위는 125~1200이며 기본값은 125입니다.
Google Cloud:
Google Cloud CPU 인스턴스: 지원되는 범위는 140~2400이며 기본값은 140입니다.
Google Cloud GPU 인스턴스: 지원되는 범위는 400~1,200,000이며 기본값은 400이지만, 볼륨 크기 GB 당 0.12개 이상이어야 합니다.
blockConfig.encryption
: 볼륨의 암호화 유형 지정:SNOWFLAKE_SSE
또는SNOWFLAKE_FULL
. 자세한 내용은 암호화 지원 섹션을 참조하십시오.
예:
volumes: - name: vol-1 source: block size: 200Gi blockConfig: initialContents: fromSnapshot: snapshot1 iops: 3000 throughput: 125
spec.containers.volumeMount
필드를 지정하여 애플리케이션 컨테이너에서 블록 저장소 볼륨을 마운트할 위치를 설명합니다. 이 필드에 제공하는 정보는 지원되는 모든 저장 볼륨에 동일하게 적용됩니다.
IOPS 및 처리량 정보¶
서비스 IO 성능이 기대에 미치지 못하고 서비스가 블록 볼륨 IO 또는 처리량에 영향을 받는다면 IOPS 또는 처리량을 늘리는 것을 고려할 수 있습니다. 현재 구현에서 이러한 변경 사항을 적용하려면 서비스를 다시 생성해야 합니다.
이러한 사용 가능한 플랫폼 메트릭 을 검토하여 서비스가 블록 저장소에서 병목 현상이 발생하고 있는지 확인할 수 있습니다.
container.cpu.usage
volume.read.iops
volume.write.iops
volume.read.throughput
volume.write.throughput
클라우드 공급자에 따라 다음과 같은 고려 사항이 적용됩니다.
AWS 에 대한 iops 및 처리량 구성하기:
구성 가능한 최대 IOPS는 볼륨 크기 GiB당 500 IOPS이며, 최대 16,000 IOPS입니다. 예를 들어, 10GiB 볼륨의 최대 IOPS는 500 * 10 = 5000이 됩니다. 따라서 16,000의 최대 IOPS는 볼륨이 32GiB 이상인 경우에만 구성할 수 있습니다.
구성 가능한 최대 처리량은 4 IOPS당 1MiB/초이며, 최대 1000MiBs/초까지 가능합니다. 예를 들어, 기본값 3000 IOPS를 사용하면 처리량을 초당 최대 750MiB(3000/4=750)까지 구성할 수 있습니다.
Azure에 대한 iops 및 처리량 구성하기:
볼륨 크기가 6 GB 가 되면 지원되는 IOPS 수가 6 GB 를 초과할 경우 1 GB 마다 500개씩 증가합니다(디스크 유형). 10GB 볼륨의 최대 IOPS 는 500 * 4 + 3000 = 5000이 될 수 있습니다. 따라서 80,000의 최대 IOPS는 볼륨이 160GiB 이상인 경우에만 구성할 수 있습니다.
6GB를 초과하면 구성할 수 있는 최대 처리량이 매 IOPS당 0.25MiB/초씩 증가하여 최대 1200MiBs/초까지 증가합니다. 예를 들어, 기본값 3000 IOPS를 사용하면 처리량을 초당 최대 750MiB(3000*0.25=750)까지 구성할 수 있습니다.
Google Cloud의 iops 및 처리량 구성하기:
CPU 인스턴스:
IOPS 는 Gi의 볼륨 크기당 최대 500 IOPS 까지 구성할 수 있으며, 최대값은 160,000 IOPS 입니다. 예를 들어, 10 Gi 볼륨은 최대 5,000 IOPS (500 IOPS * 10 Gi)까지 달성할 수 있습니다. 최대 160,000 IOPS 에 도달하려면 320 Gi 이상의 볼륨 크기가 필요합니다.
4 IOPS 마다 1 MiB/초의 비율로 2400 MiB/초의 최대 처리량을 구성할 수 있습니다. 예를 들어, 3000 IOPS 는 최대 750 MiB/초의 처리량(3000 / 4 = 750)을 지원합니다.
GPU 인스턴스:
IOPS 는 처리량과 독립적으로 설정할 수 없으며, IOPS 는 처리량 값에 16을 곱한 값으로 계산됩니다. 따라서 처리량을 지정하면 IOPS 가 자동으로 결정됩니다. GPU 인스턴스와 함께 사용되는 디스크에는 IOPS 구성을 권장하지 않습니다.
최소 처리량을 구성해야 합니다. 최소 400 MiB/s 또는 볼륨 크기 GiB 당 0.12 MiB/s 중 더 높은 값이어야 합니다.
구성 가능한 처리 속도는 볼륨 크기 GiB 당 1600 MiB/s이며, 최대 1,200,000 MiB/s까지 가능합니다. 예를 들어, 10 GiB 볼륨은 최대 처리량 16,000 MiB/s(1600 * 10)를 달성할 수 있습니다. 1,200,000 MiB/s의 상한은 750 GiB 이상의 볼륨에서만 달성할 수 있습니다.
액세스 제어 요구 사항¶
기존 스냅샷(사양에 fromSnapshot
이 있음)을 사용하여 볼륨을 초기화하려면 서비스의 소유자 역할에 스냅샷에 대한 USAGE 권한이 있어야 합니다.
서비스의 소유자 역할에는 스냅샷이 포함된 데이터베이스 및 스키마에 대한 USAGE 권한도 있어야 합니다.
스냅샷 관리하기¶
다음과 같이 블록 저장소 볼륨의 스냅샷을 찍은 후 나중에 백업을 사용할 수 있습니다.
스냅샷 백업을 사용하여 기존 블록 저장소 볼륨을 복원합니다.
새로운 서비스를 생성할 때 스냅샷 백업을 시드 데이터로 사용하여 새로운 블록 저장소 볼륨을 초기화합니다.
스냅샷을 찍기 전에 모든 업데이트가 디스크에 플러시되었는지 확인해야 합니다.
Snowflake는 스냅샷을 생성하고 관리하기 위한 다음 명령을 제공합니다.
또한 기존 블록 저장소 볼륨에서 스냅샷을 복원하려면 ALTER SERVICE … RESTORE VOLUME 명령을 실행하면 됩니다. 스냅샷을 복원하려면 먼저 서비스를 일시 중단해야 합니다. 볼륨을 복원한 후에는 서비스가 자동으로 재개됩니다.
블록 저장 비용¶
자세한 내용은 Snowflake 서비스 사용 테이블 을 참조하십시오.
블록 저장소가 작업 서비스와 함께 사용되는 경우, 사용자가 작업 서비스를 중단하거나 완료 후 Snowflake가 정리한 후에는 블록 저장소 비용 청구가 중지됩니다.
암호화 지원¶
블록 저장소 볼륨과 스냅샷은 다른 Snowflake 관리 저장소에도 사용되는 것과 동일한 두 가지 암호화 모드를 지원합니다.
SNOWFLAKE_SSE: 서버 측 암호화 전용. 이는 Snowflake 계정에서 Tri-Secret-Secure를 활성화하지 않은 고객을 위한 기본 구성입니다.
Snowflake는 클라우드 서비스 공급자(CSP)의 블록 저장소 볼륨과 스냅샷에 대한 암호화를 사용합니다.
SNOWFLAKE_FULL: 클라이언트 측 암호화와 서버 측 암호화. 이 구성은 Snowflake 계정에서 Tri-Secret-Secure를 사용하도록 설정한 고객의 기본 구성입니다.
데이터는 먼저 클라이언트(Snowpark Container Services 호스트)에서 암호화된 후 CSP 로 전송되어 저장소에 저장됩니다. 각 볼륨은 고유한 볼륨 키로 암호화됩니다. 해당 볼륨에서 생성하는 스냅샷을 암호화하는 데 동일한 키가 사용됩니다.
Snowflake는 데이터의 추가 암호화를 수행하므로
SNOWFLAKE_FULL
볼륨 사용과 관련된 성능 및 리소스 사용량 영향이 있습니다. Snowflake는 Linux 커널에서 제공하는 암호화 메커니즘을 사용하므로 그 영향은 크지 않을 것입니다. 성능에 미치는 영향은 워크로드에 따라 다를 수 있으므로 서비스 또는 작업 병목 현상을 식별하고, 볼륨 처리량을 늘리거나, 더 강력한 서버를 제공하는 것이 좋습니다.현재, Snowflake의 블록 저장소 볼륨과 스냅샷에는 키 교체 또는 키 재생성이 지원되지 않습니다. 볼륨의 암호화 키를 변경하려면 새 볼륨을 만들고 원본 볼륨에서 데이터를 복사합니다.
계정에 Tri-Secret Secure를 사용하도록 설정한 고객의 경우, 고객 관리 키에 대한 액세스가 취소되더라도 볼륨을 사용하여 현재 실행 중인 서비스에 볼륨 데이터를 계속 사용할 수 있다는 점에 유의하십시오. 고객 관리 키에 대한 액세스 권한을 취소할 때는 데이터를 사용할 수 없도록 해당 서비스를 종료하는 것이 좋습니다. 또한 키를 취소한 후에는 암호화된 볼륨이 있는 서비스를 시작할 수 없습니다.
볼륨 스냅샷은 원본 볼륨의 암호화 유형을 유지합니다. 예를 들어 SNOWFLAKE_SSE
볼륨의 스냅샷도 SNOWFLAKE_SSE
암호화를 사용합니다. 스냅샷을 볼륨의 초기 내용으로 사용하거나 ALTER SERVICE … RESTORE VOLUME 명령과 함께 사용하는 경우, 해당 암호화 유형이 볼륨의 암호화 유형과 일치해야 합니다. 그렇지 않으면 명령이 실패합니다.
예¶
예를 보려면 자습서 를 참조하십시오. 이 자습서에서는 블록 저장소 볼륨을 마운트하여 서비스를 만드는 단계별 지침을 제공합니다.
지침 및 제한 사항¶
블록 저장소 볼륨을 사용하는 서비스에는 다음과 같은 제한이 적용됩니다.
일반 제한 사항 이러한 제한으로 인해 문제가 발생하는 경우 계정 담당자에게 문의하십시오.
서비스당 최대 블록 저장소 볼륨 수는 3개입니다.
Snowflake 계정당 블록 저장소의 최대 개수는 100개입니다.
다음 표에는 노드의 인스턴스 유형에 따라 컴퓨팅 풀 노드당 탑재할 수 있는 최대 블록 저장소 볼륨 수가 나열되어 있습니다. Snowflake는 블록 저장소 볼륨을 사용하는 서비스 인스턴스가 이러한 제한에 따라 배치되도록 합니다. 이로 인해 PENDING 상태의 서비스가 추가 리소스를 기다리는 결과를 초래할 수 있습니다.
인스턴스 패밀리
AWS 한도
Azure 한도
CPU_X64_XS
22
3
CPU_X64_S
22
8
CPU_X64_M
22
16
CPU_X64_L
22
32
HIGHMEM_X64_S
22
16
HIGHMEM_X64_M
22
32
HIGHMEM_X64_L
22
32
GPU_NV_XS (Azure만 해당)
해당 없음
8
GPU_NV_S(AWS만 해당)
22
해당 없음
GPU_NV_SM (Azure만 해당)
해당 없음
32
GPU_NV_M(AWS만 해당)
21
해당 없음
GPU_NV_2M (Azure만 해당)
해당 없음
32
GPU_NV_3M (Azure만 해당)
해당 없음
16
GPU_NV_SL (Azure만 해당)
해당 없음
32
GPU_NV_L(AWS만 해당)
14
해당 없음
Snowflake 계정당 허용되는 최대 스냅샷 수는 100개입니다.
블록 저장소 볼륨을 사용하는 서비스는 최소 및 최대 인스턴스 수가 동일해야 합니다.
서비스가 생성된 후에는 다음이 적용됩니다.
서비스가 블록 저장소 볼륨을 사용 중인 경우에는 ALTER SERVICE … SET … 명령을 사용하여 서비스 인스턴스 수를 변경할 수 없습니다.
블록 저장소 볼륨의
size
,iops
,throughput
또는encryption
필드는 변경할 수 없습니다.새로운 블록 저장소 볼륨을 추가할 수 없으며, 기존 블록 저장소 볼륨을 제거할 수 없습니다.
서비스가 업그레이드되거나, 중단되었다가 다시 시작되더라도 블록 저장소 볼륨은 보존됩니다. 서비스가 중단되면 볼륨이 보존되므로 계속해서 해당 볼륨에 대한 비용을 지불해야 합니다. 서비스를 업그레이드하거나 재개하면 Snowflake는 각 블록 저장소를 이전과 동일한 서비스 인스턴스 ID에 연결합니다.
서비스가 중단되면 블록 저장소 볼륨이 삭제됩니다. 볼륨의 데이터를 보존하려면 볼륨의 스냅샷을 찍습니다. 나중에 스냅샷을 사용하여 새로운 볼륨을 초기화할 수 있습니다.
블록 저장소 볼륨은 Tri-Secret Secure 및 Periodic Rekeying 를 지원하지 않습니다. 즉, 계정에서 Tri-Secret Secure 또는 주기적 키 재생성을 활성화한 경우 다른 모든 Snowflake 데이터는 계속 보안이 강화되지만, Snowpark Container Services 블록 저장소에 저장된 이미지는 이러한 보안 강화의 이점을 누릴 수 없습니다.
Tri-Secret Secure 또는 주기적 키 재생성이 있는 계정에서 블록 저장소 볼륨을 생성하려면 먼저 블록 저장소 볼륨에 대한 이러한 추가 보안을 활용하지 않고 계속 사용할 수 있음을 이해하고 이에 동의함을 확인해야 합니다. 동의를 확인하려면 계정 관리자(ACCOUNTADMIN 역할이 있는 사용자)가 계정 수준 매개 변수 ENABLE_TRI_SECRET_AND_REKEY_OPT_OUT_FOR_SPCS_BLOCK_STORAGE 를
TRUE
로 설정해야 합니다.