服务规范参考¶
要查看 Snowpark Container Services 规范,请参阅 YAML (` https://yaml.org/spec/ (https://yaml.org/spec/) <https://yaml.org/spec/ (https://yaml.org/spec/)>`_)。它为 Snowflake 提供了配置和运行服务所需的信息。您在创建服务时提供规范。
一般语法为:
spec:
containers: # container list
- name: <name>
image: <image-name>
command: # optional list of strings
- <cmd>
- <arg1>
args: # optional list of strings
- <arg2>
- <arg3>
- ...
env: # optional
<key>: <value>
<key>: <value>
...
readinessProbe: # optional
port: <TCP port-num>
path: <http-path>
volumeMounts: # optional list
- name: <volume-name>
mountPath: <mount-path>
- name: <volume-name>
...
resources: # optional
requests:
memory: <amount-of-memory>
nvidia.com/gpu: <count>
cpu: <cpu-units>
limits:
memory: <amount-of-memory>
nvidia.com/gpu: <count>
cpu: <cpu-units>
secrets: # optional list
- snowflakeSecret:
objectName: <object-name> # specify this or objectReference
objectReference: <reference-name> # specify this or objectName
directoryPath: <path> # specify this or envVarName
envVarName: <name> # specify this or directoryPath
secretKeyRef: username | password | secret_string # specify only with envVarName
endpoints: # optional endpoint list
- name: <name>
port: <TCP port-num> # specify this or portRange
portRange: <TCP port-num>-<TCP port-num> # specify this or port
public: <true / false>
protocol : < TCP / HTTP >
corsSettings: # optional CORS configuration
Access-Control-Allow-Origin: # required list of allowed origins, for example, "http://example.com"
- <origin>
- <origin>
...
Access-Control-Allow-Methods: # optional list of HTTP methods
- <method>
- <method>
...
Access-Control-Allow-Headers: # optional list of HTTP headers
- <header-name>
- <header-name>
...
Access-Control-Expose-Headers: # optional list of HTTP headers
- <header-name>
- <header-name>
...
- name: <name>
...
volumes: # optional volume list
- name: <name>
source: local | stage | memory | block
size: <bytes-of-storage> # specify if memory or block is the volume source
uid: <UID-value> # optional, only for stage volumes
gid: <GID-value> # optional, only for stage volumes
blockConfig: # optional
initialContents:
fromSnapshot: <snapshot-name>
iops: <number-of-operations>
throughput: <MiB-per-second>
encryption: SNOWFLAKE_SSE | SNOWFLAKE_FULL
stageConfig: # optional
name: <stage_name>
medataCache: <time_period>. # optional
resources: # optional
requests:
memory: <amount-of-memory>
cpu: <cpu-units>
limits:
memory: <amount-of-memory>
cpu: <cpu-units>
- name: <name>
source: local | stage| memory | block
size: <bytes-of-storage> # specify if memory or block is the volume source
...
logExporters:
eventTableConfig:
logLevel: <INFO | ERROR | NONE>
platformMonitor: # optional, platform metrics to log to the event table
metricConfig:
groups:
- <group-1>
- <group-2>
...
capabilities:
securityContext:
executeAsCaller: <true / false> # optional, indicates whether application intends to use caller’s rights
serviceRoles: # Optional list of service roles
- name: <service-role-name>
endpoints:
- <endpoint_name1>
- <endpoint_name2>
- ...
- ...
请注意,spec 和 serviceRoles 是规范中的顶级字段。
spec:使用此字段提供规范详细信息。它包括以下顶级字段::ref:`spec.containers <label-spcs_spec_ref_spec_containers>`(必填):一个或多个应用程序容器的列表。容器化应用程序必须至少有一个容器。
:ref:`spec.endpoints <label-spcs_spec_ref_spec_endpoints>`(可选):服务显示的端点的列表。您可选择将端点设为公开,以允许网络入口访问该服务。
:ref:`spec.volumes <label-snowpark_containers_spec_volume>`(可选):容器使用的存储卷的列表。
:ref:`spec.logExporters <label-snowpark_containers_spec_reference_spec_logexporters>`(可选):此字段用于管理导出到账户中的事件表的容器日志级别。
serviceRoles:使用此字段可定义一个或多个服务角色。服务角色是用于管理服务所显示的端点的权限的机制。
一般准则¶
以下格式准则适用于
name字段(容器、端点和卷名称):最多可包含 63 个字符。
可包含一串小写字母数字或
-字符。必须以字母字符开头。
必须以字母数字字符结尾。
客户应确保没有个人数据、敏感数据、出口控制数据或其他受监管数据作为元数据输入规范文件。有关更多信息,请参阅 Snowflake 中的元数据字段。
以下各节介绍了每个顶级 spec 字段。
spec.containers 字段(必填)¶
使用 spec.containers 字段描述应用程序中的每个 OCI (https://opencontainers.org/) 容器。
请注意以下事项:
当您创建服务时,Snowflake 会在指定计算池中的单个节点上运行这些容器,共享相同的网络接口。
您可以选择运行多个服务实例,实现传入请求的负载均衡。Snowflake 可能选择在指定计算池中的同一节点或不同节点上运行这些服务实例。给定实例的所有容器始终在一个节点上运行。
目前,Snowpark Container Services 需要 linux/amd64 平台镜像。
以下各节介绍了容器字段的类型。
containers.name 和 containers.image 字段¶
对于每个容器,仅名称和镜像是必填字段。
例如:
spec:
containers:
- name: echo
image: /tutorial_db/data_schema/tutorial_repository/echo_service:dev
containers.command 和 containers.args 字段¶
使用这些可选字段,控制容器中启动的可执行文件以及传递给该可执行文件的实参。您可以在创建镜像时配置这些字段的默认值,通常在 Dockerfile 中进行配置。使用这些服务规范字段,您可以更改这些默认值(从而改变容器行为),而无需重建容器镜像:
containers.command可替换DockerfileENTRYPOINT。这允许您在容器中运行不同的可执行文件。containers.args可替换DockerfileCMD。这允许您为命令(可执行文件)提供不同的实参。
示例
Dockerfile 包括以下代码:
ENTRYPOINT ["python3", "main.py"]
CMD ["Bob"]
这些 Dockerfile 条目执行 python3 命令并传递两个实参:main.py 和 Bob。您可按如下方式替换规范文件中的这些值:
要替换 ENTRYPOINT,请在规范文件中添加
containers.command字段:spec: containers: - name: echo image: <image_name> command: - python3.9 - main.py
要替换实参“Bob”,请在规范文件中添加
containers.args字段:spec: containers: - name: echo image: <image_name> args: - Alice
containers.env 字段¶
使用 containers.env 字段定义容器环境变量。容器中的所有进程都可以访问以下环境变量:
spec:
containers:
- name: <name>
image: <image_name>
env:
ENV_VARIABLE_1: <value1>
ENV_VARIABLE_2: <value2>
…
…
示例
在 教程 1 中,应用程序代码 (echo_service.py) 读取环境变量,如下所示:
CHARACTER_NAME = os.getenv('CHARACTER_NAME', 'I')
SERVER_PORT = os.getenv('SERVER_PORT', 8080)
请注意,该示例将变量的默认值传递给 getenv 函数。如果未定义环境变量,则使用这些默认值。
CHARACTER_NAME:当 Echo 服务收到带字符串(例如,“Hello”)的 HTTP POST 请求时,服务默认返回“I said Hello”。 您可在规范文件中覆盖此默认值。例如,将值设置为“Bob”,则 Echo 服务会返回“Bob said Hello”的响应。SERVER_PORT:在此默认配置中,Echo 服务监听端口 8080。您可以替换该默认值并指定另一端口。
以下服务规范将替换这两个环境变量值:
spec:
containers:
- name: echo
image: <image_name>
env:
CHARACTER_NAME: Bob
SERVER_PORT: 8085
endpoints:
- name: echo-endpoint
port: 8085
请注意,由于您更改了服务监听的端口号,因此规范也必须更新端点(endpoints.port field 值),如上所示。
containers.readinessProbe 字段¶
使用 containers.readinessProbe 字段识别应用程序中的就绪探针。Snowflake 调用此探测以确定应用程序何时准备好处理请求。
Snowflake 在指定的端口和路径上向指定的就绪情况探测发出 HTTP GET 请求,并查找您的服务以返回 HTTP 200 OK 状态,以确保只有正常运行的容器才能提供流量。
使用以下字段提供所需信息:
port:服务正在监听就绪情况探测请求的网络端口。您无需将此端口声明为端点。path:Snowflake 使用此路径向服务发出 HTTP GET 请求。
示例
在教程 1 中,应用程序代码 (echo_python.py) 实现以下就绪情况探测:
@app.get("/healthcheck")
def readiness_probe():
因此,规范文件包括 containers.readinessProbe 字段:
spec:
containers:
- name: echo
image: <image_name>
env:
SERVER_PORT: 8088
CHARACTER_NAME: Bob
readinessProbe:
port: 8088
path: /healthcheck
endpoints:
- name: echo-endpoint
port: 8088
就绪情况探测指定的端口可以不是已配置的端点。服务可以仅出于就绪情况探测的目的来监听不同的端口。
containers.volumeMounts 字段¶
因为 spec.volumes 和 spec.containers.volumeMounts 字段是一起使用的,所以将在一个小节中一起介绍它们。有关更多信息,请参阅 spec.volumes 字段(可选)。
containers.resources 字段¶
计算池定义一组可用资源(CPU、内存和存储),Snowflake 确定在计算池的什么位置运行服务。
建议您在规范中明确指出特定容器的资源需求,并设置适当的限制。请注意,您指定的资源受到计算池中节点的实例系列的约束。有关更多信息,请参阅 CREATE COMPUTE POOL。
使用 containers.resources 字段来指定特定应用程序容器的明确资源要求:
containers.resources.requests:您指定的请求应是您预计的服务的平均资源使用量。Snowflake 使用此信息来确定服务实例在计算池中的位置。 Snowflake 确保在给定节点上放置的资源请求的总和不会超过节点上的可用资源。containers.resources.limits:您指定的限制指示 Snowflake 不分配超过指定限制的资源。因此,您可以防止成本超支。
您可以为以下资源指定请求和限制:
memory:这是应用程序容器所需的内存。您可以使用 小数或二进制单位 来表示值。例如,2G 表示请求 2,000,000,000 个字节,而 2Gi 表示请求 2 x 1024 x 1024 x 1024 个字节。指定内存时,单位是必填项。例如,
100M或5Gi。支持的单位有:M、Mi、G、Gi。cpu:这是指虚拟核心 (vCPU) 单位。例如,1 个 CPU 单位相当于 1 个 vCPU。允许小数请求,例如 0.5,也可表示为 500m。nvidia.com/gpu:如果需要 GPUs,则必须请求它们,并且对于相同的数量也必须指定limit。如果容器未指定 GPU 容量的请求和限制,则它无法访问任何 GPUs。您可请求的 GPUs 的数量由您在创建 计算池 时选择的INSTANCE_TYPE所支持的最大 GPUs 数量限制。
resource.requests 和 resource.limits 与关联的 计算池 的实例系列的节点容量(vCPU 和内存)有关。
如果没有提供资源需求(CPU、内存或两者),Snowflake 会为您派生一个:
For
cpu, the derived value is either 0.5 or thecpulimit you provided, whichever is greater.For
memory, the derived value is either 0.5 GiB or thememorylimit you provided, whichever is greater.
如果未提供资源限制(CPU、内存或两者),Snowflake 默认会将限制设置为相关 计算池 的实例系列的节点容量。
如果您提供
resource.limits并且超出了节点容量,Snowflake 将设置节点容量上限。Snowflake 独立评估
cpu和memory的资源需求。
请注意,如果 Snowflake 理论上无法在给定的计算池上安排服务,CREATE SERVICE 将会失败。理论上不可能假设计算池具有允许的最大节点数,并且计算池上没有运行其他服务。也就是说,Snowflake 无法在计算池限制内分配请求的资源。如果理论上可行,但所需资源正在使用中,那么 CREATE SERVICE 将会成功。一些服务实例会报告状态,表明由于资源不足,无法安排服务,直到资源可用为止。
示例 1
在以下规范中,containers.resources 字段描述容器的资源需求:
spec:
containers:
- name: resource-test-gpu
image: ...
resources:
requests:
memory: 2G
cpu: 0.5
nvidia.com/gpu: 1
limits:
memory: 4G
nvidia.com/gpu: 1
在此示例中,要求 Snowflake 为容器至少分配 2 个 GB 内存,1 个 GPU 和 0.5 个 CPU 核心。同时,不允许容器使用超过 4 个 GB 内存和 1 个 GPU。
示例 2
假设:
创建包含两个节点的计算池;每个节点有 27 GB 内存和 1 个 GPU:
CREATE COMPUTE POOL tutorial_compute_pool MIN_NODES = 2 MAX_NODES = 2 INSTANCE_FAMILY = gpu_nv_s
您创建一个服务,该服务要求 Snowflake 运行该服务的两个实例:
CREATE SERVICE echo_service MIN_INSTANCES=2 MAX_INSTANCES=2 IN COMPUTE POOL tutorial_compute_pool FROM @<stage_path> SPEC=<spec-file-stage-path>;
将
MIN_INSTANCES和MAX_INSTANCES均设置为 2。因此,Snowflake 将运行该服务的两个实例。
现在,考虑以下场景:
如果服务未在应用程序规范中明确包含资源需求,那么 Snowflake 将决定是在计算池中的同一节点还是不同节点上运行这些实例。
您确实在服务规范中包含了资源要求,并为容器请求 10 GB 内存。
- name: resource-test image: ... resources: requests: memory: 15G
计算池节点有 27 GB 内存,并且 Snowflake 无法在同一节点上运行两个容器。Snowflake 将在计算池中的不同节点上运行这两个服务实例。
您在服务规范中包含资源要求,并为容器请求 1 GB 内存和 1 个 GPU:
spec: containers: - name: resource-test-gpu image: ... resources: requests: memory: 2G nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1
您正在为每个容器请求 1 个 GPU,并且每个节点只有 1 个 GPU。在这种情况下,尽管内存不是问题,但 Snowflake 无法在一个节点上安排两个服务实例。此需求迫使 Snowflake 在两个单独的计算池节点上运行两个服务实例。
containers.secrets 字段¶
secrets: # optional list
- snowflakeSecret:
objectName: <object-name> # specify this or objectReference
objectReference: <reference-name> # specify this or objectName
directoryPath: <path> # specify this or envVarName
envVarName: <name> # specify this or directoryPath
secretKeyRef: username | password | secret_string # specify only with envVarName
- snowflakeSecret: <object-name> # equivalent to snowflakeSecret.objectName
...
在服务规范中使用 containers.secrets 字段,为应用程序容器提供 Snowflake 管理的凭据。首先将凭据存储在 Snowflake 密钥 对象中。然后,在服务规范中,引用密钥对象并指定在容器内放置凭据的位置。
以下是关于如何使用 containers.secrets 字段的摘要:
指定 Snowflake 密钥: 使用
snowflakeSecret字段指定 Snowflake 密钥对象名称或对象引用。对象引用在使用 Snowpark Container Services 创建原生应用程序(带容器的应用程序)时适用。使用
secretKeyRef提供 Snowflake 密钥中密钥的名称。
在应用程序容器中指定密钥位置: 使用
envVarName字段以环境变量或directoryPath形式传递密钥,或将密钥写入本地容器文件。
有关更多信息,请参阅 使用 Snowflake 密钥将凭据传递到容器。
请注意,创建服务的角色(所有者角色)需要对引用的密钥具有 READ 权限。
spec.endpoints 字段(可选)¶
使用 spec.endpoints 字段指定应用程序显示的 TCP 网络端口的列表。一项服务可能向多个端点显示零。使用以下字段描述端点:
port:服务正在监听的网络端口。必须指定此字段或portRange字段。portRange:应用程序正在监听的网络端口范围。必须指定此字段或port字段。portRange中定义的端口只能通过直接调用服务实例 IP 地址来访问。要获取服务实例 IP 地址,请使用前缀为instances.的 DNS 名称。instances.<Snowflake_assigned_service_DNS_name>有关更多信息,请参阅 服务到服务通信。
请注意,您只能在
portRange字段设置为protocol并且 TCP 字段为 False 时指定public字段。public: If you want this endpoint to be accessible from outside the Snowpark Container Services network, set this field totrue. Public endpoints only support the "HTTP" value for theprotocolfield.protocol:端点支持的协议。支持的值为 TCP 和 HTTP。默认情况下,该协议为 HTTP。指定protocol时,请注意以下事项:当此端点是公共端点或服务函数的目标时(请参阅 使用服务),协议必须为 HTTP 或 HTTPS。
作业服务要求所有指定的端点使用 TCP 协议;不支持 HTTP/HTTPS 协议。
corsSettings:endpoints下的字段允许您配置 Snowflake 对公共端点 HTTP 请求的 CORS 支持。corsSettings.Access-Control-Allow-Origin:指定 Snowflake 使用所提供的 CORS 允许和公开响应标头进行响应的来源。该值必须是有效的 URL 且不能包含路径,例如:https://example.com/, https://example.com:12345。出于安全考虑,Access-Control-Allow-Origin不允许使用“*”通配符。Snowflake 支持以下 CORS 响应标头:
corsSettings.Access-Control-Allow-Methods:指定 HTTPAccess-Control-Allow-MethodsCORS 响应标头的值。这用于告知浏览器在向该端点发送请求时允许使用的 HTTP 方法(如 GET、POST 等)。corsSettings.Access-Control-Allow-Headers:指定 HTTPAccess-Control-Allow-HeadersCORS 响应标头的值。这用于告知浏览器在向该端点发送请求时允许使用的 HTTP 标头。corsSettings.Access-Control-Expose-Headers:指定 HTTPAccess-Control-Expose-HeadersCORS 响应标头的值。这用于告知浏览器在公开该端点的响应时应当允许哪些 HTTP 标头信息。
备注
Snowflake 对公共访问执行身份验证和授权检查,只允许有权限的 Snowflake 用户使用该服务。对端点的公共访问需要 Snowflake 身份验证。经过身份验证的用户还必须对该服务端点具有授权(用户对访问该端点的角色拥有使用权限)。
示例
以下是 教程 1 中使用的应用程序规范:
spec:
container:
- name: echo
image: <image-name>
env:
SERVER_PORT: 8000
CHARACTER_NAME: Bob
readinessProbe:
port: 8000
path: /healthcheck
endpoint:
- name: echoendpoint
port: 8000
public: true
此应用程序容器显示一个端点。它还包括一个可选的 public 字段,允许从 Snowflake 外部访问端点(互联网访问)。默认情况下,public 是 false。
spec.volumes 字段(可选)¶
本节将介绍 spec.volumes 和 spec.containers.volumeMounts 规范字段,因为它们密切相关。
spec.volumes定义共享文件系统。这些卷可以在您的容器中使用。spec.containers.volumeMount定义卷在特定容器中显示的位置。
请注意,volumes 字段在 spec 级别指定,但由于多个容器可共享相同的卷,因此 volumeMounts 成为 spec.containers 级别的字段。
使用这些字段来描述卷和卷挂载。
spec.volumes:使用以下字段描述卷:所有卷类型的必填字段:
name:卷的唯一名称。该名称请参考spec.containers.volumeMounts.name。source: This can belocal,memory,block,stage, or"@<stagename>"(which is deprecated). The next section explains these volume types.size`(仅对 ``memory`和block卷类型为必需):对于内存和块卷,这是卷的大小(以字节为单位)。对于块存储,该值必须始终是一个整型,使用 Gi 单位后缀指定。例如,5Gi表示5*1024*1024*1024个字节。
For the
blocktype volume, you can specify these optional fields:blockConfig.initialContents.fromSnapshot,blockConfig.iops,blockConfig.throughput, andblockConfig.encryption. For more information, see 在服务规范中指定块存储.For the
stagetype volume,nameis a required field. It identifies the stage. You can also specify the optional fieldsstageConfig.resourcesandstageConfig.metadataCache. For more information, see 将 Snowflake 暂存区卷与服务搭配使用.
spec.containers.volumeMounts:每个容器可以有零个或多个卷挂载。containers.volumeMounts也是一个列表。也就是说,每个容器可以有多个卷挂载。使用以下字段来描述卷装载:name:要挂载的卷的名称。单个容器可以多次引用同一卷。mountPath:容器中应挂载的卷的文件路径。
关于支持的卷类型¶
Snowflake 支持应用程序容器使用以下这些卷类型:本地、内存、块和 Snowflake 暂存区。
本地卷: 服务实例中的容器可使用本地磁盘来共享文件。例如,如果应用程序有两个容器 – 一个应用程序容器和一个日志分析器,则应用程序可将日志写入本地卷,而日志分析器可读取日志。
请注意,如果您正在运行一个服务的多个实例,则只有属于一个服务实例的容器才能共享卷。属于不同服务实例的容器不共享卷。
内存: 您可以使用 RAM 支持的文件系统供容器使用。
块: 容器也可以使用块存储卷。有关更多信息,请参阅 将块存储卷与服务一起使用。
Snowflake 暂存区: 您还可以让容器方便访问账户中 Snowflake 暂存区上的文件。有关更多信息,请参阅 将 Snowflake 暂存区卷与服务搭配使用。
示例
机器学习应用程序包括以下两个容器:
一个适用于主应用程序的
app容器一个收集日志并将其上传到 Amazon S3 的
logger-agent容器
这些容器使用以下两个卷:
local卷:此应用程序写入日志代理读取的日志。Snowflake 暂存区 –
@model_stage:主应用程序从此暂存区中读取文件。
在以下示例规范中,app 容器挂载 logs 和 models 两个卷,而 logging-agent 容器仅挂载 logs 卷:
spec: containers: - name: app image: <image1-name> volumeMounts: - name: logs mountPath: /opt/app/logs - name: models mountPath: /opt/models - name: logging-agent image: <image2-name> volumeMounts: - name: logs mountPath: /opt/logs volumes: - name: logs source: local - name: models source: "@model_stage"
如果服务的多个实例正在运行,则一个服务实例中的 logging-agent 和 app 容器共享 logs 卷。logs 卷不在服务实例之间共享。
如果除这些卷之外,您的 app 容器还使用一个 2-GB 内存的卷,请修改规范,以将该卷包含在 volumes 列表中,并在 app 容器 volumeMounts 列表中添加另一个卷挂载:
spec: containers: - name: app image: <image1-name> volumeMounts: - name: logs mountPath: /opt/app/logs - name: models mountPath: /opt/models - name: my-mem-volume mountPath: /dev/shm - name: logging-agent image: <image2-name> volumeMounts: - name: logs mountPath: /opt/logs volumes: - name: logs source: local - name: models source: "@model_stage" - name: "my-mem-volume" source: memory size: 2G
请注意,当您指定 memory 作为卷 source 时,您还必须指定 volumes.size 字段来表示内存大小。有关您可以指定的内存大小单位的信息,请参阅 关于单位。
关于挂载卷上的文件权限¶
挂载 Snowflake 暂存区或块存储卷的容器通常以根用户身份运行。但是,有时您的容器可能会以非根用户身份运行。例如:
如果应用程序使用第三方库,则该库将使用非根用户在容器内运行应用程序代码。
出于安全性等其他原因,您可以在容器内以非根用户身份运行应用程序。
为避免与文件用户权限相关的潜在错误,将容器的 UID(用户 ID)和 GID(组 ID)设置为规范的一部分非常重要。这对于使用特定用户和组在容器内启动或运行应用程序的容器来说,这一点尤为重要。通过设置适当的 UID 和 GID,您可以使用以非根用户身份运行的容器。例如:
spec:
...
volumes:
- name: stagemount
source: "@test"
uid: <UID-value>
gid: <GID-value>
Snowflake 使用此信息以适当的权限挂载暂存区。
要获取容器的 UID 和 GID,请执行以下步骤:
使用
docker run在本地运行容器。使用
docker container list命令查找容器 ID。部分样本输出:CONTAINER ID IMAGE COMMAND —---------------------------------------------------------- a6a1f1fe204d tutorial-image "/usr/local/bin/entr…"
在容器内运行
docker id命令来获取 UID 和 GID:docker exec -it <container-id> id
示例输出:
uid=0(root) gid=0(root) groups=0(root)
spec.logExporters 字段(可选)¶
Snowflake 会收集应用程序输出到标准输出或标准错误的内容。有关更多信息,请参阅 访问本地容器日志。 使用 spec.logExporters 来配置 Snowflake 将哪些输出导出到 事件表。
logExporters:
eventTableConfig:
logLevel: < INFO | ERROR | NONE >
支持的 logLevel 值为:
:code:`INFO`(默认):导出所有用户日志。
ERROR:仅导出错误日志。Snowflake 仅导出标准错误 (stderr) 流中的日志。NONE:不将日志导出到事件表中。
spec.platformMonitor 字段(可选)¶
个别服务发布指标。这些 Snowflake 提供的指标也称为平台指标。您在规范中添加了 spec.platformMonitor 字段,指示 Snowflake 将服务的指标发送到为账户配置的事件表。此功能的目标用例是观察特定服务的资源利用率。
platformMonitor:
metricConfig:
groups:
- <group_1>
- <group_2>
...
group_N 指的是您感兴趣的 预定义指标组。在服务运行期间,Snowflake 将指定组的指标记录到事件表中。然后,您可以从事件表中查询指标。有关更多信息,请参阅 监控服务。
关于单位¶
服务规范在多个地方采用数值。支持使用多种单位来表示这些值。对于大值和小值,您可使用二进制和十进制单位,如下所示。在以下列表中,“#”表示整数值。
二进制单位:
numberKi表示number*1024。 例如,4Ki 等于 4096。numberMi表示number*1024*1024。numberGi表示number*1024*1024*1024。
十进制单位:
numberk表示number*1000。例如,4k 等于 4000。numberM表示number*1000*1000。numberG表示number*1000*1000*1000。
小数单位:
numberm表示number*0.001。例如,cpu: 500m相当于cpu: 0.5。
capabilities 字段(可选)¶
在规范中的 capabilities 顶级字段中,使用 securityContext.executeAsCaller 字段表示应用程序打算使用 调用方权限。
capabilities:
securityContext:
executeAsCaller: <true / false> # optional, indicates whether application intends to use caller’s rights
默认情况下,executeAsCaller 为 false。
serviceRoles 字段(可选)¶
使用规范中的 serviceRoles 顶级字段来定义一个或多个服务角色。对于每个服务角色,提供您希望服务角色授予 USAGE 权限的一个或多个端点的名称和列表(在 spec.endpoints 中定义)。
serviceRoles: # Optional list of service roles
- name: <name>
endpoints:
- <endpoint-name>
- <endpoint-name>
- ...
- ...
请注意以下事项:
name和endpoints都是必填项。服务角色名称须遵循以下格式:
必须包含字母数字或
_字符。必须以字母字符开头。
必须以字母数字字符结尾。
有关更多信息,请参阅 管理与服务相关的权限。