向使用容器的应用程序添加计算池¶
本主题介绍如何在 Snowflake Native Apps with Snowpark Container Services 中使用计算池。
关于使用容器的应用程序中的计算池¶
计算池 是一个或多个虚拟机 (VM) 节点,Snowflake 在该节点上运行 Snowpark Container Services。使用容器的应用程序利用使用者账户中的计算池来管理应用程序所需的容器镜像。
一个应用程序可以创建多个计算池,每个计算池都归该应用程序独有。应用程序使用的计算池不能用于其他用途。
应用程序中的容器可以直接相互访问,即使它们位于不同的计算池中也是如此。
但是,使用不同的计算池让提供商可以分离服务类型。例如,提供商可以将其前端服务与后端服务分开。
计算池是账户级对象,这意味着每个计算池的名称在使用者账户中必须具有唯一性。
在使用容器的应用程序中使用计算池的最佳实践¶
提供商在为使用者账户创建计算池时应考虑以下最佳实践:
计算池对成本有影响。设置
min_nodes
、max_nodes
和instance_family
属性的值,以使用正确数量的资源至关重要。提供商还应将 AUTO_SUSPEND_SECS 属性设置为自动暂停非活动计算池。有关更多信息,请参阅 CREATE COMPUTE POOL。
计算池是账户级对象,因此其池名称在使用者账户中必须具有唯一性。请考虑使用应用程序名称作为计算池名称的前缀,以确保唯一性。
将计算池添加到使用安装在不同云服务提供商上的容器的应用程序时,用于创建计算池的代码必须考虑到不同云服务提供商之间实例系列的差异。例如,
HIGHMEM_X64_L
实例系列对于每个云服务提供商都有不同的配置。有关可用实例系列的更多信息,请参阅 CREATE COMPUTE POOL。有关如何为不同云服务提供商设置实例系列的示例,请参阅 为每个提供商选择不同的实例系列。
仅当使用容器的应用程序使用 GPU 作为计算池的实例系列时,将
uses_gpu
属性设置为 TRUE。有关更多信息,请参阅 设置清单文件中的 uses_gpu 属性。
为应用程序创建计算池¶
有两种方法可以为使用容器的应用程序创建计算池:
该应用程序将创建安装期间所需的计算池。这要求使用者将计算池的 CREATE COMPUTE POOL 权限授予应用程序。提供商可以将应用程序配置为使用 Snowsight 请求这些权限。
有关更多信息,请参阅 配置应用程序以请求 CREATE COMPUTE POOL 权限。
使用者手动创建应用程序所需的计算池。使用者必须运行 CREATE COMPUTE POOL 来创建计算池,然后手动将计算池的 CREATE COMPUTE POOL 权限授予应用程序。
设置清单文件中的 uses_gpu
属性¶
如果使用容器的应用程序指定 GPU 作为计算池的实例系列,提供商必须在清单中将 uses_gpu
标志设置为 true
。以下示例演示如何在 artifacts
块中设置此标志:
artifacts:
readme: readme.md
setup_script: scripts/setup.sql
container_services:
uses_gpu: true|false
images:
- /provider_db/provider_schema/provider_repo/server:prod
- /provider_db/provider_schema/provider_repo/web:1.0
应用程序版本扫描过程中,自动安全扫描使用此标志安全扫描框架来验证行为。
小心
要在 Snowflake Marketplace 上发布使用容器的应用程序,该应用程序必须在安装过程中创建所需的计算池。有关 Snowflake Marketplace 发布要求,请参阅 强制要求。
配置应用程序以请求 CREATE COMPUTE POOL 权限¶
提供商可以将应用程序配置为请求 CREATE COMPUTE POOL 权限。他们还可以在安装或升级应用程序时,使用安装脚本创建计算池。
备注
一个应用程序最多可以在一个使用者账户中创建 5 个计算池。如果您的应用程序需要创建更多计算池,请联系 Snowflake 支持部门。
请求 CREATE COMPUTE POOL 权限¶
应用程序可以向使用者请求 CREATE COMPUTE POOL 权限。此权限允许应用程序在使用者账户中创建计算池。请参阅 向使用者请求全局权限,了解有关向使用者请求全局权限的一般信息。
要向使用者请求 CREATE COMPUTE POOL 权限,请将 CREATE COMPUTE POOL 权限添加到 manifest.yml
文件,如以下示例所示:
...
privileges:
- CREATE COMPUTE POOL
description: "Enable application to create one to five compute pools"
...
请参阅 为带有容器的应用程序创建清单文件,了解有关为使用容器的应用程序创建 manifest.yml
文件的更多信息。
备注
容器应用程序中 CREATE COMPUTE POOL 权限请求的行为与其他权限请求不同。将此权限添加到 manifest.yml
文件时,Snowsight 会显示允许使用者授予所需权限的界面。
将 CREATE COMPUTE POOL 命令添加到安装脚本中¶
要在使用者账户中创建计算池,请在应用程序的安装脚本中添加 CREATE COMPUTE POOL 命令。
以下示例演示如何在安装脚本的存储过程中创建计算池:
CREATE COMPUTE POOL IF NOT EXISTS app_compute_pool
MIN_NODES = 1
MAX_NODES = 1
INSTANCE_FAMILY = standard_1
AUTO_RESUME = true;
备注
在应用程序中创建计算池时,提供商应在创建计算池前检查其是否已授予 CREATE COMPUTE POOL 权限。
应用程序创建的计算池归该应用程序独有。其他应用程序或使用者不能直接使用。
通常,在以下情况下,使用者账户中的用户只能看到应用程序创建的计算池:
用户已获得 MANAGE GRANTS 权限。
应用程序使用应用程序角色授予对计算池的访问权限。
应用程序开发人员可以允许具有活动角色的用户具有对计算池所有的应用程序的特定权限。此外,具有 ACCOUNTADMIN 角色的管理员可以授予自己控制计算池所有的应用程序所需的权限。有关计算池访问权限要求的更多信息,请参阅 ALTER COMPUTE POOL。
在安装脚本中为计算池添加前缀¶
由于计算池是账户级对象,因此计算池名称在使用者账户中必须具有唯一性。以下示例演示如何使用应用程序名称作为计算池名称的前缀:
LET POOL_NAME := (select current_database()) || '_app_pool';
CREATE COMPUTE POOL IF NOT EXISTS identifier(:pool_name)
MIN_NODES = 1
MAX_NODES = 1
INSTANCE_FAMILY = STANDARD_2;
为每个提供商选择不同的实例系列¶
为跨多个云服务提供商发布的应用程序创建计算池时,必须考虑到实例系列配置方式的差异,因此需要编写创建安装脚本的代码。
以下示例演示如何编写存储过程,以根据安装应用程序的云服务提供商创建计算池:
CREATE OR REPLACE PROCEDURE public.create_cp()
RETURNS VARCHAR
LANGUAGE SQL
EXECUTE AS OWNER
AS $$
BEGIN
LET POOL_NAME := (select current_database()) || '_app_pool';
LET INSTANCE_FAMILY := IFF( CONTAINS(current_region(), 'AZURE') , 'GPU_NV_XS' , 'GPU_NV_S' );
CREATE COMPUTE POOL IF NOT EXISTS identifier(:pool_name)
MIN_NODES = 1
MAX_NODES = 1
INSTANCE_FAMILY = :instance_family;
RETURN 'Compute Pool Created';
END;
$$;