コンテンツにスキップ

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 つのデプロイメントがあることがわかります。 controllerdispatcher データプレーンのそれぞれに 3 つです。これは必ずしも望ましいことではありません。 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 については、グローバルデフォルトのオーバーライドを行い、それぞれに正確に 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 の構成はやや複雑ですが、*ワークロードごと*のオーバーライドが可能になるため、本番システムでは、最初は有望に見えるかもしれないグローバルデフォルトに依存するのではなく、これを使用して各ワークロードを正確なニーズに合わせて調整することをお勧めします。

サイトのトラフィックを理解するために、アナリティクスと Cookie を使用しています。サイトの使用状況に関する情報は、その目的で Google と共有されます。 詳細。