配置 EnvoyProxy 资源配额
概述
使用 EnvoyProxyResourceQuota 限制一个命名空间中由 EnvoyProxy 资源声明的 CPU 和内存请求总量。该配额适用于 EnvoyProxy 所声明的 Envoy 数据平面配置;它不会替代 Kubernetes ResourceQuota,也不会直接测量生成的 Envoy Deployment。
此功能在 ACP 4.5 及更高版本中可用。该功能由 Envoy Gateway Operator 提供,并使用
envoy-gateway.alauda.io/v1alpha1 API 组。
Gateway 和 EnvoyProxy 是独立的资源。建议为每个 Gateway 使用一个专用的 EnvoyProxy,并通过 .spec.infrastructure.parametersRef 由
Gateway 引用该资源。使用 ACP Web Console 时,控制台可以将配套的 EnvoyProxy 与 Gateway 一起创建;应用 YAML 时,请显式创建并引用这两个资源。
配额适用于 Gateway 命名空间中的 EnvoyProxy 资源。有关更多信息,请参阅
配置 GatewayAPI Gateway。
配额模型
EnvoyProxyResourceQuota 是命名空间级资源。配额仅适用于同一命名空间中的 EnvoyProxy 资源。首个版本支持以下硬限制:
配额资源同时报告配置的硬限制和当前命名空间的使用量:
status.hard与spec.hard保持一致。status.used是命名空间中EnvoyProxy资源的使用量总和。
如果一个命名空间包含多个配额对象,则每个对象的 status.used 都会报告相同的命名空间总量。不要将多个配额对象的
status.used 值相加。其命名空间中的每个 EnvoyProxy 请求都必须满足所有配额对象的要求。
创建配额
通过应用 namespace 级的 EnvoyProxyResourceQuota 资源来创建配额。以下示例将该 namespace 中 Envoy data plane 从节点的 CPU 请求限制为 4 个核心,将内存请求限制为 8 GiB:
当必须同时检查不同策略时,可以在一个 namespace 中创建多个配额。只有当其产生的使用量在每个配额的硬限制以内时,EnvoyProxy 才会被准入。
配置 EnvoyProxy 请求
配额会统计 EnvoyProxy 资源中的以下字段:
例如,以下 EnvoyProxy 会从配额中消耗 750m CPU 和 768Mi 内存:
使用量计算如下:
如果省略某个字段,配额将使用以下默认值:
配额不会统计资源限制,也不会检查由 Envoy Gateway 生成的最终 Deployment。
准入行为
当 namespace 中存在一个或多个配额时,Envoy Gateway Operator 会在 EnvoyProxy CREATE 和 UPDATE 请求存储之前对其进行验证:
- 根据该 namespace 中的
EnvoyProxy资源计算其现有使用量。 - 对于更新操作,使用新对象的使用量替换旧对象的使用量。
- 根据该 namespace 中的每个配额检查产生的 CPU 和内存使用量。
- 如果任何硬限制将被超出,则拒绝该请求。错误信息会标识配额、资源、当前使用量、请求使用量和硬限制。
删除 EnvoyProxy 后,控制器重新调和配额时会减少报告的 status.used。不包含 EnvoyProxyResourceQuota 对象的 namespace 不会施加此 EnvoyProxy 特定的准入限制。
准入是一种尽力而为的防护措施。并发的 CREATE 或 UPDATE 请求会根据请求时观察到的使用量进行评估,并不会以原子方式预留资源。在需要严格隔离时,请预留足够的余量。
监控 namespace 使用量
配额状态是 namespace 级总量的事实来源。列出配额以查看硬限制和已使用值:
输出包含以下列:
如需查看完整值,请将某个配额资源检查为 YAML:
配额或 EnvoyProxy 发生变化后,控制器会异步更新 status.hard 和 status.used。当一个
namespace 包含多个配额时,仅显示一次 namespace 使用量,并分别显示每个配额的硬限制;不要对重复的
CPU Used 或 Memory Used 值求和。
范围和限制
- 此功能从 ACP 4.5 起可用。
- 仅支持
requests.cpu和requests.memory。 - 配额具有 namespace 作用域,仅适用于该 namespace 中的
EnvoyProxy资源。 - 配额独立于 Kubernetes
ResourceQuota;不会读取或更新ResourceQuota.status.used。 - 不会限制资源
limits。 - 不会跟踪最终的 Envoy Deployment,也不会强制执行 Deployment 准入策略。
- 不支持跨 namespace 配额、特定于 Gateway 或 GatewayClass 的组,也不支持标签选择器。
下一步
创建配额后,配置相应的 Gateway 及其专用的
EnvoyProxy。若要了解 Envoy Gateway Operator 如何部署这些资源,请参阅
Envoy Gateway Operator。
商标声明
Envoy® 是 The Linux Foundation 的注册商标。
Alauda 是独立供应商。本产品与 The Linux Foundation 无关联,也未获得其认可或赞助。所有商标均归其各自所有者所有,此处仅用于标识目的。