使用 GCPBackendPolicy 范围自定义后端配置

多集群 Google Kubernetes Engine (GKE) 推理网关环境中,您可以将不同的后端配置应用于部署在多个集群中的服务。例如,您可以为不同区域或环境中的后端设置不同的最大请求速率或容量缩放器。

为了理解本文档,您应该熟悉以下内容:

本文档面向以下角色:

  • 有兴趣使用 Kubernetes 容器编排功能处理 AI/机器学习工作负载的机器学习 (ML) 工程师、平台管理员和运维人员以及数据和 AI 专家。
  • 与 Kubernetes 网络交互的云架构师或网络专家。

如需详细了解我们在Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务

GCPBackendPolicy 范围的运作方式

GCPBackendPolicy 中的 scopes 字段可让您根据后端运行的特定集群自定义后端配置。您可以为不同环境或区域中的后端应用不同的设置,从而对分布式 AI/ML 工作负载进行精细控制。以下各部分介绍了如何定位资源、定义政策范围以及处理冲突解决。

目标推理网关资源

如需在多集群 GKE 环境中使用推理网关政策,GCPBackendPolicytargetRef 字段必须引用 GCPInferencePoolImport 资源:

targetRef:
  group: networking.gke.io
  kind: GCPInferencePoolImport
  name: example

政策范围定义

GCPBackendPolicy 中的 scopes 字段可让您将不同的后端设置应用于特定的后端组。通过在 default.scopes 中定义配置对象,您可以使用集群标签来精确定位后端并应用特定设置。例如,您可以为不同区域或集群中的后端设置唯一的容量限制或请求速率。

您无法在主 default 部分和 default.scopes 条目中同时指定相同的后端级字段(例如 maxRatePerEndpoint)。尝试这样做会导致政策被拒绝,这有助于确保配置清晰一致。

冲突解决

如果后端与多个范围匹配,系统会应用以下规则来确保行为可预测:

  • 优先匹配:如果后端与 scopes 列表中的多个选择器匹配,系统只会应用第一个匹配的选择器中的设置。按从最具体到最宽泛的顺序排列范围,有助于确保您的预期配置生效。
  • 精确定位:当单个选择器包含多个标签(例如 gke.io/region: us-central1env: prod)时,后端必须满足所有这些标签,系统才能应用相应范围的配置。此方法可让您根据多个条件精确定位后端。

各后端支持的字段

下表列出了您可以自定义的后端级字段,以便在不同环境或区域中控制后端行为。

字段名称 说明 配置示例
backendPreference 指定在多区域负载均衡的容量追逐期间,后端是首选 (PREFERRED) 还是默认 (DEFAULT)。 backendPreference: PREFERRED
balancingMode 指定平衡算法。支持的值包括 RATEUTILIZATIONCUSTOM_METRICS balancingMode: CUSTOM_METRICS
capacityScalerPercent 根据容量配置流量分配。此值是一个介于 0 到 100 之间的百分比,用作后端配置的目标容量的乘数。默认值为 100%。 capacityScalerPercent: 20
customMetrics 指定当 balancingMode 设置为 CUSTOM_METRICS 时用于负载均衡的自定义指标。此字段是一个指标定义列表。 customMetrics: [{ name: "my-metric", value: 0.8 }]
maxInFlightPerEndpoint 设置每个端点的并发请求数或连接数上限。 maxInFlightPerEndpoint: 100
maxRatePerEndpoint 设置每个端点的最大请求速率(以每秒请求数 [RPS] 为单位)。 maxRatePerEndpoint: 50

指定范围选择器

每个范围中的 selectors 字段可让您控制哪些后端会接收特定政策设置。您可以根据后端集群标签(内置 GKE 标签或您自己的自定义标签)来定位后端,以便为不同的后端组量身定制配置。

kind: GCPBackendPolicy
apiVersion: networking.gke.io/v1
metadata:
  name: echoserver-v2
spec:
  targetRef:
    group: "networking.gke.io"
    kind: GCPInferencePoolImport
    name: test-inference-pool
  default:
    balancingMode: IN_FLIGHT # IN_FLIGHT mode is set at the default level
    scopes:
    - selector:
        gke.io/zone: "us-central1-a"
      maxInFlightPerEndpoint: 100 # Invalid: maxInFlightPerEndpoint cannot be set within a scope when balancingMode is IN_FLIGHT at the default level

隐式 GKE 标签

以下隐式标签可用作选择器。 GKE 会自动将以下标签应用于您的集群:

标签 说明 示例值
gke.io/cluster-name GKE 集群的名称。 my-cluster
gke.io/region 集群所在的区域。 us-central1
gke.io/zone 集群所在的可用区。 us-central1-a

自定义聚类标签

自定义集群标签可让您更灵活地对后端进行分组和管理。通过在 GKE 集群上定义自己的标签,您可以在 GCPBackendPolicy 中创建高度特定的选择器,以应用独特的配置。例如,您可以根据不同环境(devstagingprod)或特定应用版本等条件来配置这些设置。

如需向 GKE 集群添加自定义标签(例如 environment=production),请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --region=REGION \
    --update-labels=LABEL_KEY=LABEL_VALUE

替换以下内容:

  • CLUSTER_NAME:您的集群的名称。
  • REGION:集群所在的区域。
  • LABEL_KEY:自定义标签的键,例如 environment
  • LABEL_VALUE:自定义标签的值,例如 production

然后,您可以使用政策中的自定义标签选择器选择此集群中的后端。

包含范围选择器的 GCPBackendPolicy 示例

以下示例定义了一个以名为 experimentalGCPInferencePoolImport 为目标的 GCPBackendPolicy。该政策使用隐式标签和自定义标签来设置 backendPreferencemaxRatePerEndpointcapacityScalerPercent 的值。

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: backend-policy
spec:
  targetRef:
    kind: GCPInferencePoolImport
    name: experimental
  default:
    scopes:
      # Selector 1: Targets backends in us-west2, sets capacity to 50%
      - capacityScalarPercent: 50
        selector:
          gke.io/region: us-west2

      # Selector 2: Targets backends in clusters labeled 'env: prod'
      - maxRatePerEndpoint: 40
        selector:
          env: prod

      # Selector 3: Targets backends in a specific US-Central zone and marks them as PREFERRED
      - backendPreference: PREFERRED
        maxRatePerEndpoint: 50
        selector:
          gke.io/cluster-name: my-cluster
          gke.io/zone: us-central1-a

应用此政策后,您会发现以下行为:

  • us-west2 区域内集群中的后端会将有效容量调整为 50%。
  • 标记为 env: prod 的集群中的后端限制为每个端点每秒最多 40 个请求。
  • 在专门位于 us-central1-a 区域的集群中,后端在负载均衡期间会获得优先处理 (PREFERRED),并且每个端点的最大速率为每秒 50 个请求。

后续步骤