跳至內容

改善 Knative 工作負載的高可用性配置

發布於: 2023-06-13 ,  修訂於: 2024-01-17

改善 Knative 工作負載的高可用性配置

作者:Matthias Weßendorf,Red Hat 的資深首席軟體工程師

在本部落格文章中,您將學習如何使用 Knative Operator 來維護 Knative 工作負載高可用性的精細配置。

Knative Operator 為您提供宣告式 API 來描述您的 Knative Serving 和 Eventing 安裝。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 個部署:每個 controllerdispatcher 資料平面各 3 個。這不總是您想要的,因為 InMemoryChannel 更常用作開發期間的工具,而在生產環境中,則會使用其他工作負載,例如 Knative BrokerApache Kafka 的 Knative Channel 實作。

使用工作負載覆寫微調高可用性配置

現在,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 提供了一個易於使用的 API,用於定義 Knative 工作負載的高可用性配置,但 workloads 是一個不錯的選項,可以調整和最佳化安裝。雖然 workloads 的設定稍微複雜一些,因為它允許對生產系統進行每個工作負載的覆寫,但建議使用它來根據其確切需求調整每個工作負載,而不是依賴於一開始看起來可能很有希望的全域預設值。

我們使用分析和 Cookie 來了解網站流量。為了該目的,有關您使用我們網站的資訊會與 Google 分享。了解詳情。