×

高可用性 (HA) 是 Kubernetes API 的标准功能,有助于确保在发生中断时 API 保持运行。在 HA 部署中,如果活动控制器崩溃或被删除,则另一个控制器随时可用。此控制器接管以前由现在不可用的控制器服务的 API 的处理。

OpenShift Serverless 中的 HA 可通过领导者选举实现,在安装 Knative Serving 或 Eventing 控制平面后,默认情况下启用该功能。使用领导者选举 HA 模式时,控制器实例已在它们需要之前被调度并运行在集群内。这些控制器实例竞争使用共享资源,称为领导者选举锁。在任何给定时间访问领导者选举锁资源的控制器实例称为领导者。

OpenShift Serverless 中的 HA 可通过领导者选举实现,在安装 Knative Serving 或 Eventing 控制平面后,默认情况下启用该功能。使用领导者选举 HA 模式时,控制器实例已在它们需要之前被调度并运行在集群内。这些控制器实例竞争使用共享资源,称为领导者选举锁。在任何给定时间访问领导者选举锁资源的控制器实例称为领导者。

为 Knative Eventing 配置高可用副本

Knative Eventing 的 `eventing-controller`、`eventing-webhook`、`imc-controller`、`imc-dispatcher` 和 `mt-broker-controller` 组件默认情况下具有高可用性 (HA),默认配置为每个组件有两个副本。可以通过修改 `KnativeEventing` 自定义资源 (CR) 中的 `spec.high-availability.replicas` 值来更改这些组件的副本数量。

对于 Knative Eventing,`mt-broker-filter` 和 `mt-broker-ingress` 部署不通过 HA 进行缩放。如果需要多个部署,请手动缩放这些组件。

前提条件
  • 您拥有 OpenShift Container Platform 的集群管理员权限,或者您拥有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。

  • OpenShift Serverless Operator 和 Knative Eventing 已安装在您的集群上。

步骤
  1. 在 OpenShift Container Platform Web 控制台的 **管理员** 视角中,导航到 **OperatorHub** → **已安装的 Operators**。

  2. 选择 `knative-eventing` 命名空间。

  3. 单击 OpenShift Serverless Operator 的 **提供的 API** 列表中的 **Knative Eventing** 以转到 **Knative Eventing** 选项卡。

  4. 单击 **knative-eventing**,然后转到 **knative-eventing** 页面中的 **YAML** 选项卡。

    Knative Eventing YAML
  5. 修改 `KnativeEventing` CR 中的副本数量

    YAML 示例
    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      high-availability:
        replicas: 3
  6. 您也可以为特定工作负载指定副本数量。

    针对工作负载的配置会覆盖 Knative Eventing 的全局设置。

    YAML 示例
    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      high-availability:
        replicas: 3
      workloads:
      - name: mt-broker-filter
        replicas: 3
  7. 验证是否遵守高可用性限制

    示例命令
    $ oc get hpa -n knative-eventing
    示例输出
    NAME                 REFERENCE                      TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
    broker-filter-hpa    Deployment/mt-broker-filter    1%/70%    3         12        3          112s
    broker-ingress-hpa   Deployment/mt-broker-ingress   1%/70%    3         12        3          112s
    eventing-webhook     Deployment/eventing-webhook    4%/100%   3         7         3          115s

为 Apache Kafka 的 Knative 代理实现配置高可用副本

Apache Kafka 的 Knative 代理实现组件 `kafka-controller` 和 `kafka-webhook-eventing` 默认情况下具有高可用性 (HA),默认配置为每个组件有两个副本。可以通过修改 `KnativeKafka` 自定义资源 (CR) 中的 `spec.high-availability.replicas` 值来更改这些组件的副本数量。

前提条件
  • 您拥有 OpenShift Container Platform 的集群管理员权限,或者您拥有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。

  • OpenShift Serverless Operator 和 Apache Kafka 的 Knative 代理已安装在您的集群上。

步骤
  1. 在 OpenShift Container Platform Web 控制台的 **管理员** 视角中,导航到 **OperatorHub** → **已安装的 Operators**。

  2. 选择 `knative-eventing` 命名空间。

  3. 单击 OpenShift Serverless Operator 的 **提供的 API** 列表中的 **Knative Kafka** 以转到 **Knative Kafka** 选项卡。

  4. 单击 **knative-kafka**,然后转到 **knative-kafka** 页面中的 **YAML** 选项卡。

    Knative Kafka YAML
  5. 修改 `KnativeKafka` CR 中的副本数量

    YAML 示例
    apiVersion: operator.serverless.openshift.io/v1alpha1
    kind: KnativeKafka
    metadata:
      name: knative-kafka
      namespace: knative-eventing
    spec:
      high-availability:
        replicas: 3

覆盖中断预算

Pod 中断预算 (PDB) 是 Kubernetes API 的标准功能,有助于限制在需要重新安排其 Pod 以进行维护时对应用程序的中断。

步骤
  • 通过修改 `KnativeEventing` 自定义资源 (CR) 中的 `minAvailable` 配置值来覆盖特定资源的默认 PDB。

具有 `minAvailable` 设置为 70% 的 PDB 示例
apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
 name: knative-eventing
 namespace: knative-eventing
spec:
 podDisruptionBudgets:
 - name: eventing-webhook
   minAvailable: 70%

如果您禁用高可用性(例如,将high-availability.replicas值更改为1),请确保同时将相应的PDB minAvailable值更新为0。否则,Pod Disruption Budget 将阻止自动集群或Operator更新。