将块存储卷与服务一起使用

对于容器化的应用程序,Snowflake 支持以下存储卷类型:Snowflake 内部暂存区、本地存储、内存存储卷和块存储卷。

在服务规范中指定块存储

要创建使用块存储的服务(包括作业服务),请在服务规范中提供必要的配置,如下所示:

  1. 指定 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
    
    Copy

    以下字段为必填字段:

    • name:卷的名称。

    • source:卷的类型。对于块存储卷,值为 block

    • size:块存储卷的存储容量,以字节为计量单位。值必须始终为整数(使用 Gi 单位后缀指定)。例如,5Gi 表示 5*1024*1024*1024 字节。云提供商的大小值范围:

      • 对于 AWS 和 Azure,为 1Gi16384Gi

      • 对于 Google Cloud,为 4Gi16384Gi

    以下是可选字段:

    • 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_SSESNOWFLAKE_FULL。有关更多信息,请参阅 加密支持

    例如:

    volumes:
      - name: vol-1
        source: block
        size: 200Gi
        blockConfig:
          initialContents:
            fromSnapshot: snapshot1
          iops: 3000
          throughput: 125
    
    Copy
  2. 指定 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 ... 命令(当服务使用块存储卷时)。

    • 您不能更改块存储卷的 sizeiopsthroughputencryption 字段。

    • 不能添加新的块存储卷,也不能移除现有的块存储卷。

    • 如果升级或者暂停和恢复服务,则块存储卷会被保留。当服务暂停时,您将继续支付卷的费用,因为卷被保留了下来。升级或恢复服务后,Snowflake 会将每个块存储卷附加到与以前相同的服务实例 ID。

    • 如果弃用服务,块存储卷会被删除。要保留卷中中数据,请对卷 拍摄快照。以后可以使用快照初始化新卷。

语言: 中文