2.3. OpenShift Serverless Serving 扩展和性能


OpenShift Serverless Serving 必须根据以下参数进行扩展和配置:

  • Knative 服务数
  • 修订数
  • 系统中并发请求数
  • 请求有效负载的大小
  • 用户 web 应用程序添加的 Knative Service 的 startup-latency 和响应延迟
  • 随着时间的推移更改 KnativeService 自定义资源(CR)的数量

2.3.1. KnativeServing 默认配置

默认情况下,OpenShift Serverless Serving 配置为运行具有高可用性和中型 CPU 和内存请求和限值的所有组件。这意味着 KnativeServing CR 中的 high-available 字段会自动设置为 2,所有系统组件都会扩展到两个副本。此配置适用于中型工作负载场景,并已使用以下内容进行测试:

  • 170 Knative Services
  • 每个 Knative Service 的 1-2 个修订版本
  • 89 测试场景主要侧重于测试 control plane
  • 48 重新创建 Knative Services 被删除并重新创建的情况
  • 41 稳定场景,在请求速度缓慢但持续发送到系统

在这些测试情况下,系统组件会有效地使用:

组件测量资源

openshift-serverless项目中的 Operator

1 GB 内存, 0.2 个内核的 CPU

在项目 knative-serving中提供组件

5 GB 内存, 2.5 个内核 CPU

2.3.2. OpenShift Serverless Serving 的最小要求

虽然默认设置适用于中型工作负载,但可能会超额化用于较小的设置,或针对高工作负载场景进行大小化。要为最小工作负载场景配置 OpenShift Serverless Serving,您需要了解系统组件的空闲消耗。

2.3.2.1. 空闲消耗

空闲消耗取决于 Knative 服务的数量。为 knative-serving 和 knative- serving -ingress OpenShift Container Platform 项目中的组件测量以下内存用量:

组件0 个服务100 个服务500 个服务1000 个服务

Activator

55Mi

86Mi

300Mi

450Mi

autoscaler

52Mi

102Mi

225Mi

350Mi

controller

100Mi

135Mi

310Mi

500Mi

webhook

60Mi

60Mi

60Mi

60Mi

3scale-kourier-gateway

20Mi

60Mi

190Mi

330Mi

net-kourier-controller

90Mi

170Mi

340Mi

430Mi

注意

已安装 3scale-kourier-gatewaynet-kourier-controller 组件或 istio-ingressgatewaynet-istio-controller 组件。

net-istio 的内存消耗基于网格中的 pod 总数。

2.3.3. 为最小工作负载配置 Serving

流程

  • 您可以使用 KnativeServing 自定义资源(CR)为最小工作负载配置 Knative Serving:

    KnativeServing CR 中的最小工作负载配置

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      high-availability:
        replicas: 1 1
      workloads:
        - name: activator
          replicas: 2 2
          resources:
            - container: activator
              requests:
                cpu: 250m 3
                memory: 60Mi 4
              limits:
                cpu: 1000m
                memory: 600Mi
        - name: controller
          replicas: 1 5
          resources:
            - container: controller
              requests:
                cpu: 10m
                memory: 100Mi
              limits: 6
                cpu: 200m
                memory: 300Mi
        - name: webhook
          replicas: 2
          resources:
            - container: webhook
              requests:
                cpu: 100m 7
                memory: 60Mi
              limits:
                cpu: 200m
                memory: 200Mi
      podDisruptionBudgets: 8
        - name: activator-pdb
          minAvailable: 1
        - name: webhook-pdb
          minAvailable: 1

    1
    把它设置为 1 可将所有系统组件扩展到一个副本。
    2
    激活器应始终扩展到至少 2 个实例,以避免停机。
    3
    Activator CPU 请求不应小于 250m,因为 HorizontalPodAutoscaler 将使用此请求作为扩展和缩减的引用。
    4
    将内存请求调整为上表中的空闲值。另外,根据您的预期负载调整内存限值(这可能需要自定义测试来查找最佳值)。
    5
    一个 Webhook 和一个控制器足以满足最小工作负载的情况
    6
    这些限制足以满足最小工作负载的情况,但可能需要根据您的具体工作负载进行调整。
    7
    Webhook CPU 请求不应小于 100m,因为 HorizontalPodAutoscaler 将使用此请求作为扩展和缩减的引用。
    8
    PodDistruptionBudgets 调整为小于 replicas 的值,以避免节点维护期间出现问题。

2.3.4. 为高工作负载配置 Serving

您可以使用 KnativeServing 自定义资源(CR)为高工作负载配置 Knative Serving。以下发现与为高工作负载配置 Knative Serving 相关:

注意

这些发现已使用有效负载大小为 0-32 kb 的请求进行测试。这些测试中使用的 Knative Service 后端有 0 到 10 秒的启动延迟,并在 0 到 5 秒之间响应时间。

  • 所有 data-plane 组件在更高的请求和限值上增加 CPU 使用量,因此必须测试并可能会增加 CPU 请求和限值。
  • activator 组件可能需要更多内存,当它需要缓冲更多或较大的请求有效负载时,因此可能需要增加内存请求和限值。
  • 一个 activator pod 可以在开始增加延迟前每秒处理大约 2500 个请求,在某些情况下会导致错误。
  • 一个 3scale-kourier-gatewayistio-ingressgateway pod 也可以在开始增加延迟前每秒处理大约 2500 个请求,在某些情况下会导致错误。
  • 每个 data-plane 组件最多消耗 1 个 vCPU 来每秒处理 2500 个请求。请注意,这高度依赖于有效负载大小和 Knative Service 后端的响应时间。
重要

Knative Service 用户工作负载的快速启动和快速响应对于整个系统的良好性能至关重要。当 Knative Service 用户后端扩展或请求并发达到其容量时,Knative Serving 组件会缓冲传入的请求。如果您的 Knative Service 用户工作负载引入长时间的启动或请求延迟,它将过载 激活器 组件(CPU 和内存配置太低),或者导致调用客户端的错误。

流程

  • 要微调安装,请使用之前的发现以及您自己的测试结果来配置 KnativeServing 自定义资源:

    KnativeServing CR 中的高工作负载配置

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      high-availability:
        replicas: 2 1
      workloads:
        - name: component-name 2
          replicas: 2 3
          resources:
            - container: container-name
              requests:
                cpu: 4
                memory:
              limits:
                cpu:
                memory:
      podDisruptionBudgets: 5
        - name: name-of-pod-disruption-budget
          minAvailable: 1

    1
    将此参数设置为至少 2 个,以确保每个组件都至少有两个实例正在运行。您还可以使用 工作负载 覆盖某些组件的副本。
    2
    使用 工作负载 列表配置特定组件。使用组件的部署名称并设置 replicas 字段。
    3
    对于 activatorwebhook3scale-kourier-gateway 组件(使用 pod 横向自动扩展(HPAs)),replicas 字段会设置最小副本数。实际的副本数取决于 HPAs 完成的 CPU 负载和扩展。
    4
    至少根据空闲消耗设置请求和限制 CPU 和内存,同时考虑之前的发现和您自己的测试结果。
    5
    PodDistruptionBudgets 调整为小于 副本 的值,以避免节点维护期间出现问题。默认 minAvailable 设置为 1,因此如果您增加所需的副本,还必须增加 minAvailable
重要

由于每个环境高度具体,因此测试和查找您自己的理想配置至关重要。使用 OpenShift Container Platform 的监控和警报功能持续监控您的实际资源消耗,并根据需要进行修改。

如果使用 OpenShift Serverless 和 Service Mesh 集成,则 istio-proxy sidecar 容器会添加额外的 CPU 处理。有关此信息的更多信息,请参阅 Service Mesh 文档。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.