将块存储卷与服务一起使用¶
对于容器化的应用程序,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
:指定支持的每秒输入/输出操作峰值数量。请注意,每次操作的数据大小上限为 256 KiB。对于 AWS:支持范围为 3000-16000,默认值为 3000。
对于 Azure:支持范围为 3000-80000,默认值为 3000。
对于 Google Cloud:
Google Cloud CPU 实例:支持范围为 2000-160000,默认值如下:
2000 IOPS(适用于 4 Gi 磁盘大小)
2500 IOPS(适用于 5 Gi 磁盘大小)
3000 IOPS(适用于所有其他磁盘大小)
Google Cloud GPU 实例:Snowflake 建议仅指定吞吐量。对于 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,最大为 16000 IOPS。例如,10 GiB 卷的最大 IOPS 可以是 500 * 10 = 5000。因此,请注意,只有当您的卷为 32 GiB 或更大时,才能配置最大 IOPS 16000。
可配置的最大吞吐量为每 4 IOPS 1 MiB/秒,最大为 1000 MiBs/秒。例如,使用默认的 3000 IOPS,您可以配置高达 750 MiB/秒的吞吐量 (3000/4=750)。
为 Azure 配置 IOPS 和吞吐量:
在卷大小达到 6 GB 后,超出 6 GB 的每 GB(磁盘类型)所支持的 IOPS 数量将增加 500。10GB 卷的最大 IOPS 可以是 500 * 4 + 3000 = 5000。因此,请注意,只有在卷为 160 GiB 或更大时,才能配置最大 IOPS 80000。
6 GB 后,可配置的最大吞吐量是每 IOPS 为 0.25 MiB/秒,最大为 1200 MiBs/秒。例如,使用默认的 3000 IOPS,您可以配置高达 750 MiB/秒的吞吐量 (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 或更大。
可以配置 2400 MiB/秒的最大吞吐量,每 4 IOPS 的速率为 1 MiB/秒。例如,3000 IOPS 支持高达 750 MiB/秒的吞吐量 (3000 / 4 = 750)。
对于 GPU 实例:
IOPS 不能独立于吞吐量进行设置;IOPS 的计算方法为 16 乘以吞吐量值。因此,指定吞吐量会自动确定 IOPS。对于与 GPU 实例一起使用的磁盘,不建议配置 IOPS。
您必须配置最低吞吐量。对于每 GiB 的卷大小,吞吐量必须至少为 400 MiB/s,或者 0.12 MiB/s,以较高者为准。
对于每 GiB 的卷大小,可配置的吞吐率为 1600 MiB/s,最大值为 1200,000 MiB/s。例如,一个 10 GiB 卷可以实现最大吞吐量 16,000 MiB/s (1600 * 10)。请注意,仅当卷为 750 GiB 或更大时,才能达到 1,200,000 MiB/s 的上限。
访问控制要求¶
如果要使用现有快照(fromSnapshot
在规范中)初始化卷,则服务的所有者角色必须对快照拥有 USAGE 权限。
服务的所有者角色还必须对包含快照的数据库和架构拥有 USAGE 权限。
管理快照¶
您可以拍摄块存储卷的快照,并在以后使用备份,如下所示:
使用快照备份恢复现有的块存储卷。
创建新服务时,使用快照备份作为种子数据来初始化新的块存储卷。
在拍摄快照之前,您应确保所有更新都刷新到磁盘。
Snowflake 提供了以下命令来创建和管理快照:
此外,要在现有块存储卷上恢复快照,可以执行 ALTER SERVICE ...RESTORE VOLUME 命令。请注意,您需要先暂停服务,然后才能恢复快照。恢复卷后,服务将自动恢复。
块存储成本¶
有关更多信息,请参阅 Snowflake 服务消耗表。
当块存储卷与作业服务一起使用时,在作业服务由用户删除或在完成后由 Snowflake 清理后,Snowflake 会停止收取块存储费用。
加密支持¶
块存储卷和快照支持同样用于其他 Snowflake 管理的存储的两种加密模式:
SNOWFLAKE_SSE: 仅限服务器端加密。这是未在 Snowflake 账户上启用 Tri-Secret-Secret 的客户的默认配置。
Snowflake 对块存储卷和快照使用云服务提供商 (CSP) 的加密。
SNOWFLAKE_FULL: 客户端和服务器端加密。这是已在 Snowflake 账户上启用 Tri-Secret-Secret 的客户的默认配置。
数据先在客户端(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。
如果弃用服务,块存储卷会被删除。要保留卷中中数据,请对卷 拍摄快照。以后可以使用快照初始化新卷。