改善 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
個部署:每個 controller
和 dispatcher
資料平面各 3
個。這不總是您想要的,因為 InMemoryChannel
更常用作開發期間的工具,而在生產環境中,則會使用其他工作負載,例如 Knative Broker 或 Apache 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-controller
和 imc-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
的設定稍微複雜一些,因為它允許對生產系統進行每個工作負載的覆寫,但建議使用它來根據其確切需求調整每個工作負載,而不是依賴於一開始看起來可能很有希望的全域預設值。