Contrail のコンポーネント
Contrailアーキテクチャは、ネットワーク設定プレーンとネットワークコントロールプレーン機能を実行するポッドと、ネットワークデータプレーン機能を実行するポッドで構成されています。
-
ネットワーク設定プレーンとは、Contrailがリソースを管理し、他のKubernetesコントロールプレーンとやり取りできる機能を指します。
-
ネットワークコントロールプレーンは、Contrailのフル機能を搭載したSDN機能を表しています。BGP を使用して他のコントローラと通信し、XMPP はワーカー ノード上の分散データ プレーン コンポーネントと通信します。
-
ネットワークデータプレーンは、各ノード(特にワークロードが存在するワーカーノード)で、パケットの送受信機能を指します。
設定およびコントロールプレーン機能を実行するポッドは、Kubernetesコントロールプレーンノードに存在します。データ プレーン機能を実行するポッドは、Kubernetes コントロール プレーン ノードと Kubernetes ワーカー ノードの両方に存在します。
表 1 は、さまざまな Contrail コンポーネントを示しています。
ポッド名 | ( | 説明 | )|
---|---|---|---|
設定プレーン | contrail-k8s-apiserver | 制御プレーン ノード | このポッドは、すべてのContrailリソースを管理するためのエントリーポイントである集約型APIサーバーです。通常の kube-apiserver に APIService として登録されます。通常の kube-apiserver は、すべてのネットワーク関連リクエストを contrail-k8s-apiserver に転送して処理します。 Kubernetesコントロールプレーンノードごとに1つのcontrail-k8s-apiserverポッドがあります。 |
contrail-k8s-controller | 制御プレーン ノード | このポッドは、Kubernetes制御ループ機能を実行して、ネットワークリソースを調整します。ネットワーク リソースを常時監視し、リソースの実際の状態が意図した状態と一致していることを確認します。 Kubernetesコントロールプレーンノードごとに1つのcontrail-k8s-controllerポッドがあります。 |
|
contrail-k8s-kubemanager | 制御プレーン ノード | このポッドは、KubernetesリソースとContrailリソースの間のインターフェイスです。サービスや名前空間などの通常のKubernetesリソースに対する変更については、kube-apiserverを監視し、ネットワークリソースに影響を与える変更に作用します。 単一クラスタの導入では、Kubernetesコントロールプレーンノードごとに1つのcontrail-k8s-kubemanagerポッドがあります。 マルチクラスターの導入では、分散ワークロードクラスターごとにさらに1つのcontrail-k8s-kubemanagerポッドがあります。 |
|
制御プレーン | Contrail制御 | 制御プレーン ノード | このポッドは、ワーカーノードに設定を渡し、ルート学習と配信を実行します。ネットワーク制御プレーンに影響を与えるすべてのものに対して kube-apiserver を監視し、必要に応じて BGP ピアや vRouter エージェント(XMPP 経由)と通信します。 Kubernetesコントロールプレーンノードごとに1つのcontrail制御ポッドがあります。 |
データ プレーン | contrail-vrouter-nodes | ワーカー ノード | このポッドには、vRouterエージェントとvRouter自体が含まれています。 vRouter エージェントは、Contrail コントローラーと対話する際に、ローカル vRouter に代わって動作します。ノードごとにエージェントが 1 つあります。エージェントは、2 つの Contrail コントローラとの XMPP セッションを確立して、以下の機能を実行します。
vRouter は、同じ場所にあるポッドとワークロードに対してパケットの送受信機能を提供します。CNIプラグイン機能を提供します。 |
contrail-vrouter-masters | 制御プレーン ノード | このポッドは、contrail-vrouter-nodesポッドと同じ機能を提供しますが、コントロールプレーンノード上に存在します。 | |
メモ:
ネットワーク構成プレーンとネットワーク制御プレーンを構成するコンポーネントは、総称して Contrail コントローラと呼ばれます。 |
図 1 は、これらのコンポーネントを Kubernetes クラスタのコンテキストで示しています。わかりやすくするため、また乱雑さを軽減するために、この図では Kubernetes コントロール プレーン ノード上のデータ プレーン ポッドは表示されません。
リリース 22.2 以降、OpenShift で実行する場合、Contrail はデフォルトで独自の etcd データベースを使用します。以前のリリースおよびアップストリームのKubernetesで実行されているすべてのContrailリリースでは、ContrailはメインのKubernetes etcdデータベースを使用しています。
kube-apiserver は、クラスターの Kubernetes REST API コールのエントリ ポイントです。すべてのネットワークリクエストをContrail-k8s-apiserverに転送します。Contrail API呼び出しのエントリポイントです。contrail-k8s-apiserver は、受信するネットワーク要求を、対応する Contrail オブジェクトへの REST API 呼び出しに変換します。場合によっては、これらの呼び出しにより、Contrail コントローラが 1 つ以上のワーカー ノード上の vRouter エージェントに XMPP メッセージを送信したり、他のコントロール プレーン ノードまたは外部ルーターに BGP メッセージ(図示せず)を送信したりすることがあります。これらの XMPP および BGP メッセージは、通常の Kubernetes ノード間通信の外部で送信されます。
contrail-k8s-kubemanager(クラスター)コンポーネントは、マルチクラスターの導入にのみ存在します。さまざまなタイプの導入の詳細については、「導入モデル」を参照してください。
図 2 は、複数の Contrail コントローラを持つクラスタを示しています。Kubernetes コンポーネントは、REST を使用して相互に通信します。Contrail コントローラは、通常の Kubernetes REST インターフェイスの外部で、iBGP を使用して互いにルートを交換します。冗長性を確保するために、ワーカーノードのvRouterエージェントは、常に2つのContrailコントローラとのXMPP通信を確立します。