4.3. Kuryr を使用して OpenShift Container Platform を RHOSP にインストールするためのリソースのガイドライン
Kuryr SDN を使用する場合、Pod、サービス、namespace およびネットワークポリシーは RHOSP クォータのリソースを使用します。これにより、最小要件が増加します。また、Kuryr にはデフォルトインストールに必要な要件以外の追加要件があります。
以下のクォータを使用してデフォルトのクラスターの最小要件を満たすようにします。
リソース | 値 |
---|---|
Floating IP アドレス | 3: LoadBalancer タイプに予想されるサービス数 |
ポート | 1500: Pod ごとに 1 つ必要 |
ルーター | 1 |
サブネット | 250: namespace/プロジェクトごとに 1 つ必要 |
ネットワーク | 250: namespace/プロジェクトごとに 1 つ必要 |
RAM | 112 GB |
vCPU | 28 |
ボリュームストレージ | 275 GB |
インスタンス | 7 |
セキュリティーグループ | 250: サービスおよび NetworkPolicy ごとに 1 つ必要 |
セキュリティーグループルール | 1000 |
サーバーグループ | 2 - 各マシンプールの追加のアベイラビリティーゾーンごとに 1 つ追加 |
ロードバランサー | 100: サービスごとに 1 つ必要 |
ロードバランサーリスナー | 500: サービスで公開されるポートごとに 1 つ必要 |
ロードバランサーノード | 500: サービスで公開されるポートごとに 1 つ必要 |
クラスターは推奨されるリソースよりもリソースが少ない場合にも機能する場合がありますが、その場合のパフォーマンスは保証されません。
RHOSP オブジェクトストレージ (Swift) が利用可能で、swiftoperator
ロールを持つユーザーアカウントによって操作されている場合、これは OpenShift Container Platform イメージレジストリーのデフォルトバックエンドとして使用されます。この場合、ボリュームストレージ要件は 175 GB です。Swift 領域要件は、イメージレジストリーのサイズによって異なります。
OVN Octavia ドライバーではなく Amphora ドライバーで Red Hat OpenStack Platform(RHOSP) バージョン 16 を使用している場合、セキュリティーグループはユーザープロジェクトではなくサービスアカウントに関連付けられます。
リソースを設定する際には、以下の点に注意してください。
- 必要なポート数は Pod 数よりも大きくなる。Kuryr はポートプールを使用して、事前に作成済みのポートを Pod で使用できるようにし、Pod の起動時間を短縮します。
-
各ネットワークポリシーは RHOSP セキュリティーグループにマップされ、
NetworkPolicy
仕様によっては 1 つ以上のルールがセキュリティーグループに追加される。 各サービスは RHOSP ロードバランサーにマップされる。クォータに必要なセキュリティーグループの数を見積もる場合には、この要件を考慮してください。
RHOSP バージョン 15 以前のバージョン、または
ovn-octavia driver
を使用している場合、各ロードバランサーにはユーザープロジェクトと共にセキュリティーグループがあります。クォータはロードバランサーのリソース (VM リソースなど) を考慮しませんが、RHOSP デプロイメントのサイズを決定する際にはこれらのリソースを考慮する必要があります。デフォルトのインストールには 50 を超えるロードバランサーが あり、クラスターはそれらのロードバランサーに対応できる必要があります。
OVN Octavia ドライバーを有効にして RHOSP バージョン 16 を使用している場合は、1 つのロードバランサー仮想マシンのみが生成され、サービスは OVN フロー経由で負荷分散されます。
OpenShift Container Platform デプロイメントは、コントロールプレーンマシン、コンピュートマシン、およびブートストラップマシンで設定されます。
Kuryr SDN を有効にするには、使用する環境が以下の要件を満たしている必要があります。
- RHOSP 13+ を実行します。
- オーバークラウドと Octavia を使用します。
- Neutron トランクポートの拡張を使用します。
-
ML2/OVS Neutron ドライバーが
ovs-hybrid
の代わりに使用れる場合、openvswitch
ファイアウォールドライバーを使用します。
4.3.1. クォータの拡大 リンクのコピーリンクがクリップボードにコピーされました!
Kuryr SDN を使用する場合、Pod、サービス、namespace、およびネットワークポリシーが使用する Red Hat OpenStack Platform (RHOSP) リソースに対応するためにクォータを引き上げる必要があります。
手順
以下のコマンドを実行して、プロジェクトのクォータを増やします。
sudo openstack quota set --secgroups 250 --secgroup-rules 1000 --ports 1500 --subnets 250 --networks 250 <project>
$ sudo openstack quota set --secgroups 250 --secgroup-rules 1000 --ports 1500 --subnets 250 --networks 250 <project>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.2. Neutron の設定 リンクのコピーリンクがクリップボードにコピーされました!
Kuryr CNI は Neutron トランクの拡張を使用してコンテナーを Red Hat OpenStack Platform (RHOSP) SDN にプラグインします。したがって、Kuryr が適切に機能するには trunks
拡張を使用する必要があります。
さらにデフォルトの ML2/OVS Neutron ドライバーを使用する場合には、セキュリティーグループがトランクサブポートで実行され、Kuryr がネットワークポリシーを適切に処理できるように、ovs_hybrid
ではなく openvswitch
に設定される必要があります。
4.3.3. Octavia の設定 リンクのコピーリンクがクリップボードにコピーされました!
Kuryr SDN は Red Hat OpenStack Platform (RHOSP) の Octavia LBaaS を使用して OpenShift Container Platform サービスを実装します。したがって、Kuryr SDN を使用するように RHOSP に Octavia コンポーネントをインストールし、設定する必要があります。
Octavia を有効にするには、Octavia サービスを RHOSP オーバークラウドのインストール時に組み込むか、オーバークラウドがすでに存在する場合は Octavia サービスをアップグレードする必要があります。Octavia を有効にする以下の手順は、オーバークラウドのクリーンインストールまたはオーバークラウドの更新の両方に適用されます。
以下の手順では、Octavia を使用する場合に RHOSP のデプロイメント 時に必要となる主な手順のみを説明します。また、レジストリーメソッド が変更されることにも留意してください。
以下の例では、ローカルレジストリーの方法を使用しています。
手順
ローカルレジストリーを使用している場合、イメージをレジストリーにアップロードするためのテンプレートを作成します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow local_registry_images.yaml
ファイルに Octavia イメージが含まれることを確認します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Octavia コンテナーのバージョンは、インストールされている特定の RHOSP リリースによって異なります。
コンテナーイメージを
registry.redhat.io
からアンダークラウドノードにプルします。(undercloud) $ sudo openstack overcloud container image upload \ --config-file /home/stack/local_registry_images.yaml \ --verbose
(undercloud) $ sudo openstack overcloud container image upload \ --config-file /home/stack/local_registry_images.yaml \ --verbose
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これには、ネットワークおよびアンダークラウドディスクの速度に応じて多少の時間がかかる可能性があります。
Octavia を使用してオーバークラウドをインストールまたは更新します。
openstack overcloud deploy --templates \ -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/octavia.yaml \ -e octavia_timeouts.yaml
$ openstack overcloud deploy --templates \ -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/octavia.yaml \ -e octavia_timeouts.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記このコマンドには、Octavia に関連付けられたファイルのみが含まれます。これは、RHOSP の特定のインストールによって異なります。詳細は RHOSP のドキュメントを参照してください。Octavia インストールのカスタマイズについての詳細は、Octavia デプロイメントのプランニング を参照してください。
注記Kuryr SDN を利用する際には、オーバークラウドのインストールに Neutron の
trunk
拡張機能が必要です。これは、Director デプロイメントでデフォルトで有効にされます。Neutron バックエンドが ML2/OVS の場合、デフォルトのovs-hybrid
の代わりにopenvswitch
ファイアウォールを使用します。バックエンドが ML2/OVN の場合には変更の必要がありません。
4.3.3.1. Octavia OVN ドライバー リンクのコピーリンクがクリップボードにコピーされました!
Octavia は Octavia API を使用して複数のプロバイダードライバーをサポートします。
利用可能なすべての Octavia プロバイダードライバーをコマンドラインで表示するには、以下を入力します。
openstack loadbalancer provider list
$ openstack loadbalancer provider list
出力例
RHOSP バージョン 16 以降、Octavia OVN プロバイダードライバー (ovn
) は RHOSP デプロイメントの OpenShift Container Platform でサポートされます。
ovn
は、Octavia および OVN が提供する負荷分散用の統合ドライバーです。これは基本的な負荷分散機能をサポートし、OpenFlow ルールに基づいています。このドライバーは、OVN Neutron ML2 を使用するデプロイメント上の director により Octavia で自動的に有効にされます。
Amphora プロバイダードライバーがデフォルトのドライバーです。ただし、ovn
が有効にされる場合には、Kuryr がこれを使用します。
Kuryr が Amphora の代わりに ovn
を使用する場合は、以下の利点があります。
- リソース要件が減少します。Kuryr は、各サービスにロードバランサーの仮想マシンを必要としません。
- ネットワークレイテンシーが短縮されます。
- サービスごとに仮想マシンを使用する代わりに、OpenFlow ルールを使用することで、サービスの作成速度が上がります。
- Amphora 仮想マシンで集中管理されるのではなく、すべてのノードに分散負荷分散アクションが分散されます。
RHOSP クラウドがバージョン 13 から 16 にアップグレードした後に、クラスターを Octavia OVN ドライバーを使用するように設定 できます。
4.3.4. Kuryr を使用したインストールについての既知の制限 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform を Kuryr SDN で使用する場合、いくつかの既知の制限があります。
RHOSP の一般的な制限
OpenShift Container Platform を Kuryr SDN と共に使用する場合は、すべてのバージョンおよび環境に適用されるいくつかの制限があります。
-
NodePort
タイプのService
オブジェクトはサポートされません。 -
OVN Octavia プロバイダーを使用するクラスターは、
Service
オブジェクトをサポートします。このオブジェクトについて、.spec.selector
プロパティーは、Endpoints
オブジェクトの.subsets.addresses
プロパティーにノードまたは Pod のサブネットが含まれる場合は指定されません。 -
マシンが作成されるサブネットがルーターに接続されていない場合や、サブネットが接続されていても、ルーターに外部ゲートウェイが設定されていない場合、Kuryr はタイプが
LoadBalancer
のService
オブジェクトの Floating IP を作成できません。 -
Service
オブジェクトでsessionAffinity=ClientIP
プロパティーを設定しても効果はありません。Kuryr はこの設定をサポートしていません。
RHOSP バージョンの制限
OpenShift Container Platform を Kuryr SDN で使用する場合は、RHOSP バージョンに依存するいくつかの制限があります。
RHOSP の 16 よりも前のバージョンでは、デフォルトの Octavia ロードバランサードライバー (Amphora) を使用します。このドライバーでは、OpenShift Container Platform サービスごとに 1 つの Amphora ロードバランサー仮想マシンをデプロイする必要があります。サービス数が多すぎると、リソースが不足する可能性があります。
OVN Octavia ドライバーが無効にされている以降のバージョンの RHOSP のデプロイメントでも Amphora ドライバーを使用します。この場合も、RHOSP の以前のバージョンと同じリソースに関する懸念事項を考慮する必要があります。
- Kuryr SDN は、サービスによる自動解凍をサポートしていません。
RHOSP のアップグレードの制限
RHOSP のアップグレードプロセスにより、Octavia API が変更され、ロードバランサーに使用される Amphora イメージへのアップグレードが必要になる可能性があります。
API の変更に個別に対応できます。
Amphora イメージがアップグレードされると、RHOSP Operator は既存のロードバランサー仮想マシンを 2 つの方法で処理できます。
- ロードバランサーのフェイルオーバー をトリガーしてそれぞれの仮想マシンをアップグレードします。
- ユーザーが仮想マシンのアップグレードを行う必要があります。
Operator が最初のオプションを選択する場合、フェイルオーバー時に短い時間のダウンタイムが生じる可能性があります。
Operator が 2 つ目のオプションを選択する場合、既存のロードバランサーは UDP リスナーなどのアップグレードされた Octavia API 機能をサポートしません。この場合、ユーザーはこれらの機能を使用するためにサービスを再作成する必要があります。
4.3.5. コントロールプレーンマシン リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、OpenShift Container Platform インストールプロセスは 3 つのコントロールプレーンマシンを作成します。
それぞれのマシンには以下が必要です。
- RHOSP クォータからのインスタンス
- RHOSP クォータからのポート
- 少なくとも 16 GB のメモリーと 4 つの vCPU を備えたフレーバー
- RHOSP クォータから少なくとも 100 GB のストレージ容量
4.3.6. コンピュートマシン リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、OpenShift Container Platform インストールプロセスは 3 つのコンピューティングマシンを作成します。
それぞれのマシンには以下が必要です。
- RHOSP クォータからのインスタンス
- RHOSP クォータからのポート
- 少なくとも 8 GB のメモリーと 2 つの vCPU を備えたフレーバー
- RHOSP クォータから少なくとも 100 GB のストレージ容量
コンピュートマシンは、OpenShift Container Platform で実行されるアプリケーションをホストします。できるだけ多くのアプリケーションを実行することが意図されています。
4.3.7. ブートストラップマシン リンクのコピーリンクがクリップボードにコピーされました!
インストール時に、ブートストラップマシンは一時的にプロビジョニングされ、コントロールプレーンを初期化します。実稼働環境用のコントロールプレーンの準備ができた後に、ブートストラップマシンのプロビジョニングは解除されます。
ブートストラップマシンには以下が必要です。
- RHOSP クォータからのインスタンス
- RHOSP クォータからのポート
- 少なくとも 16 GB のメモリーと 4 つの vCPU を備えたフレーバー
- RHOSP クォータから少なくとも 100 GB のストレージ容量
4.3.8. ユーザーによってプロビジョニングされるインフラストラクチャーの負荷分散要件 リンクのコピーリンクがクリップボードにコピーされました!
ユーザー管理のロードバランサーを使用したデプロイメントは、テクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
OpenShift Container Platform をインストールする前に、デフォルトの内部ロードバランシングソリューションの代わりに使用する独自の API およびアプリケーション Ingress ロードバランシングインフラストラクチャーをプロビジョニングできます。実稼働のシナリオでは、API およびアプリケーション Ingress ロードバランサーを個別にデプロイし、それぞれのロードバランサーインフラストラクチャーを分離してスケーリングすることができます。
Red Hat Enterprise Linux (RHEL) インスタンスを使用して API およびアプリケーションイングレスロードバランサーをデプロイする場合は、RHEL サブスクリプションを別途購入する必要があります。
負荷分散インフラストラクチャーは以下の要件を満たす必要があります。
API ロードバランサー: プラットフォームと対話およびプラットフォームを設定するためのユーザー向けの共通のエンドポイントを提供します。以下の条件を設定します。
- Layer 4 の負荷分散のみ。これは、Raw TCP または SSL パススルーモードと呼ばれます。
- ステートレス負荷分散アルゴリズム。オプションは、ロードバランサーの実装によって異なります。
重要API ロードバランサーのセッションの永続性は設定しないでください。Kubernetes API サーバーのセッション永続性を設定すると、OpenShift Container Platform クラスターとクラスター内で実行される Kubernetes API の過剰なアプリケーショントラフィックによりパフォーマンスの問題が発生する可能性があります。
ロードバランサーのフロントとバックの両方で以下のポートを設定します。
Expand 表4.2 API ロードバランサー ポート バックエンドマシン (プールメンバー) 内部 外部 説明 6443
ブートストラップおよびコントロールプレーン。ブートストラップマシンがクラスターのコントロールプレーンを初期化した後に、ブートストラップマシンをロードバランサーから削除します。API サーバーのヘルスチェックプローブの
/readyz
エンドポイントを設定する必要があります。X
X
Kubernetes API サーバー
22623
ブートストラップおよびコントロールプレーン。ブートストラップマシンがクラスターのコントロールプレーンを初期化した後に、ブートストラップマシンをロードバランサーから削除します。
X
マシン設定サーバー
注記ロードバランサーは、API サーバーが
/readyz
エンドポイントをオフにしてからプールから API サーバーインスタンスを削除するまで最大 30 秒かかるように設定する必要があります。/readyz
の後の時間枠内でエラーが返されたり、正常になったりする場合は、エンドポイントが削除または追加されているはずです。5 秒または 10 秒ごとのプロービングで、2 回連続成功すると正常、3 回連続失敗すると異常と判断する設定は、十分にテストされた値です。Application Ingress ロードバランサー: クラスター外から送られるアプリケーショントラフィックの Ingress ポイントを提供します。Ingress ルーターの作業用の設定が OpenShift Container Platform クラスターに必要です。
以下の条件を設定します。
- Layer 4 の負荷分散のみ。これは、Raw TCP または SSL パススルーモードと呼ばれます。
- 選択可能なオプションやプラットフォーム上でホストされるアプリケーションの種類に基づいて、接続ベースの永続化またはセッションベースの永続化が推奨されます。
ヒントクライアントの実際の IP アドレスがアプリケーション Ingress ロードバランサーによって確認できる場合、ソースの IP ベースのセッション永続化を有効にすると、エンドツーエンドの TLS 暗号化を使用するアプリケーションのパフォーマンスを強化できます。
ロードバランサーのフロントとバックの両方で以下のポートを設定します。
Expand 表4.3 アプリケーション Ingress ロードバランサー ポート バックエンドマシン (プールメンバー) 内部 外部 説明 443
デフォルトで Ingress コントローラー Pod、コンピュート、またはワーカーを実行するマシン。
X
X
HTTPS トラフィック
80
デフォルトで Ingress コントローラー Pod、コンピュート、またはワーカーを実行するマシン。
X
X
HTTP トラフィック
注記ゼロ (0) コンピュートノードで 3 ノードクラスターをデプロイする場合、Ingress コントローラー Pod はコントロールプレーンノードで実行されます。3 ノードクラスターデプロイメントでは、HTTP および HTTPS トラフィックをコントロールプレーンノードにルーティングするようにアプリケーション Ingress ロードバランサーを設定する必要があります。
4.3.8.1. ユーザー管理のロードバランサーを使用してデプロイされたクラスターのロードバランサー設定の例 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、ユーザー管理のロードバランサーを使用してデプロイされたクラスターのロードバランシング要件を満たす API およびアプリケーションの Ingress load balancer 設定の例を示します。この例は、HAProxy ロードバランサーの /etc/haproxy/haproxy.cfg
設定です。この例では、特定の負荷分散ソリューションを選択するためのアドバイスを提供することを目的としていません。
この例では、同じロードバランサーが Kubernetes API およびアプリケーションの Ingress トラフィックに使用されます。実稼働のシナリオでは、API およびアプリケーション Ingress ロードバランサーを個別にデプロイし、それぞれのロードバランサーインフラストラクチャーを分離してスケーリングすることができます。
HAProxy をロードバランサーとして使用し、SELinux が enforcing
に設定されている場合は、setsebool -P haproxy_connect_any=1
を実行して、HAProxy サービスが設定済みの TCP ポートにバインドできることを確認する必要があります。
例4.1 API およびアプリケーション Ingress ロードバランサーの設定例
- 1
- ポート
6443
は Kubernetes API トラフィックを処理し、コントロールプレーンマシンを参照します。 - 2 4
- ブートストラップエントリーは、OpenShift Container Platform クラスターのインストール前に有効にし、ブートストラッププロセスの完了後にそれらを削除する必要があります。
- 3
- ポート
22623
はマシン設定サーバートラフィックを処理し、コントロールプレーンマシンを参照します。 - 5
- ポート
443
は HTTPS トラフィックを処理し、Ingress コントローラー Pod を実行するマシンを参照します。Ingress コントローラー Pod はデフォルトでコンピュートマシンで実行されます。 - 6
- ポート
80
は HTTP トラフィックを処理し、Ingress コントローラー Pod を実行するマシンを参照します。Ingress コントローラー Pod はデフォルトでコンピュートマシンで実行されます。注記ゼロ (0) コンピュートノードで 3 ノードクラスターをデプロイする場合、Ingress コントローラー Pod はコントロールプレーンノードで実行されます。3 ノードクラスターデプロイメントでは、HTTP および HTTPS トラフィックをコントロールプレーンノードにルーティングするようにアプリケーション Ingress ロードバランサーを設定する必要があります。
HAProxy をロードバランサーとして使用する場合は、HAProxy ノードで netstat -nltupe
を実行して、ポート 6443
、22623
、443
、および 80
で haproxy
プロセスがリッスンしていることを確認することができます。