Knative ワークロードの高可用性構成の改善 ¶
公開日: 2023-06-13 , 更新日: 2024-01-17
Knative ワークロードの高可用性構成の改善¶
著者: Matthias Weßendorf、Red Hat シニアプリンシパルソフトウェアエンジニア
このブログ記事では、Knative Operator を使用して、Knative ワークロードの高可用性のためのきめ細かい構成を維持する方法について説明します。
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
ポッドのレプリカセットを必要とすることを定義します。見てみましょう
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
各ワークロードについて、正確に 3 つのデプロイメントが表示されます。それでは、上記のシェル スニペットをよく見てみましょう。 InMemoryChannel
には 6
つのデプロイメントがあることがわかります。 controller
と dispatcher
データプレーンのそれぞれに 3
つです。これは必ずしも望ましいことではありません。 InMemoryChannel
は開発中にツールとして使用されることが多く、本番環境では Knative Broker や Knative 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-controller
と imc-dispatcher
については、グローバルデフォルトのオーバーライドを行い、それぞれに正確に 1 つのデプロイメントに減らしました
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
の構成はやや複雑ですが、*ワークロードごと*のオーバーライドが可能になるため、本番システムでは、最初は有望に見えるかもしれないグローバルデフォルトに依存するのではなく、これを使用して各ワークロードを正確なニーズに合わせて調整することをお勧めします。