跳至内容

改进 Knative 工作负载的高可用性配置

发布时间:2023-06-13,  修改时间:2024-01-17

改进 Knative 工作负载的高可用性配置

作者:Matthias Weßendorf,Red Hat 高级首席软件工程师

在本博文中,您将了解如何使用 Knative Operator 来维护 Knative 工作负载高可用性的细粒度配置。

The Knative Operator 为您提供了用于描述 Knative Serving 和 Eventing 安装的声明式 API。spec 字段具有多个属性,用于定义所需的运行行为。

用于高可用性的便捷全局配置

查看以下安装清单

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  high-availability:
    replicas: 3

这将在 knative-eventing 命名空间中配置 Knative Eventing,并定义由 Operator 管理的所有工作负载都需要一个包含 3 个 Pod 的副本集。让我们来看看

kubectl get deployments.apps -n knative-eventing 
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
eventing-controller     3/3     3            3           58s
eventing-webhook        3/3     3            3           57s
imc-controller          3/3     3            3           53s
imc-dispatcher          3/3     3            3           52s
mt-broker-controller    3/3     3            3           51s
mt-broker-filter        3/3     3            3           51s
mt-broker-ingress       3/3     3            3           51s

对于每个工作负载,我们都看到正好三个部署。现在,仔细看看上面的 shell 代码片段。您会注意到,对于 InMemoryChannel,我们有 6 个部署:3 个用于 controllerdispatcher 数据平面。这并不总是您想要的,因为 InMemoryChannel 更常被用作开发过程中的工具,而在生产场景中,其他工作负载,如 Knative BrokerKnative Channel 的 Apache Kafka 实现被使用。

使用工作负载覆盖进行细化 HA 配置

现在,workloads 字段就派上用场了。workloads 字段允许管理员对由 Knative Operator 管理的每个工作负载进行更细粒度的调整。有关配置选项的详细信息,请参阅 文档

查看修改后的清单

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  high-availability:
    replicas: 3
  workloads:
  - name: imc-controller
    replicas: 1  
  - name: imc-dispatcher
    replicas: 1  

对于 imc-controllerimc-dispatcher,我们现在对全局默认值进行了覆盖,并将每个部署减少到正好一个。

kubectl get deployments.apps -n knative-eventing
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
eventing-controller     3/3     3            3           9m31s
eventing-webhook        3/3     3            3           9m30s
imc-controller          1/1     1            1           9m26s
imc-dispatcher          1/1     1            1           9m25s
mt-broker-controller    3/3     3            3           9m24s
mt-broker-filter        3/3     3            3           9m24s
mt-broker-ingress       3/3     3            3           9m24s

如果系统在此示例中不使用任何 InMemoryChannel,我们甚至可以将副本设置为 0

结论

虽然 high-availability 为定义 Knative 工作负载的高可用性配置提供了一个简单易用的 API,但 workloads 是一个不错的选择,可以调整和优化安装。虽然 workloads 的配置稍微复杂一些,因为它允许对生产系统的每个工作负载进行覆盖,但建议使用它来根据每个工作负载的实际需求进行调整,而不是依赖于全局默认值,因为全局默认值可能只在开始时看起来很有希望。

我们使用分析和 Cookie 来了解网站流量。有关您使用我们网站的信息将与 Google 共享,以便于此目的。了解更多。