5.2. MetalLB Operator のインストール
クラスター管理者は、MetalLB Operator を追加して、クラスター上の MetalLB インスタンスのライフサイクルを Operator によって管理できます。
MetalLB および IP フェイルオーバーは互換性がありません。クラスターに IP フェイルオーバーを設定した場合は、Operator をインストールする前に IP フェイルオーバーを削除する 手順を実行してください。
5.2.1. Web コンソールを使用した OperatorHub からの MetalLB Operator のインストール
クラスター管理者は、OpenShift Container Platform Web コンソールを使用して MetalLB Operator をインストールできます。
前提条件
- 
							cluster-admin権限を持つユーザーとしてログインしている。
手順
- 
							OpenShift Container Platform Web コンソールで、Operators OperatorHub ページに移動します。 
- キーワードを Filter by keyword ボックスに入力するか、目的の Operator までスクロールします。たとえば、 - metallbと入力して MetalLB Operator を見つけます。- また、インフラストラクチャー機能 でオプションをフィルターすることもできます。たとえば、非接続環境 (ネットワークが制限された環境ともしても知られる) で機能する Operator を表示するには、Disconnected を選択します。 
- Install Operator ページで、デフォルトを受け入れて Install をクリックします。
検証
- インストールが正常に行われたことを確認するには、以下を実行します。 - 
									Operators Installed Operators ページに移動します。 
- 
									Operator が openshift-operatorsの namespace 内に設置されていることと、その状態がSucceededとなっていることを確認してください。
 
- 
									Operators 
- Operator が正常にインストールされない場合は、Operator のステータスを確認し、ログを確認してください。 - 
									Operators Installed Operators ページに移動し、 Status列でエラーまたは失敗の有無を確認します。
- 
									Workloads Pods ページにナビゲートし、問題を報告している openshift-operatorsプロジェクトの Pod のログを確認します。
 
- 
									Operators 
5.2.2. CLI を使用した OperatorHub からのインストール
					OpenShift Container Platform Web コンソールを使用する代わりに、CLI を使用して OperatorHub から Operator をインストールできます。OpenShift CLI (oc) を使用して、MetalLB Operator をインストールできます。
				
					CLI を使用する場合は、metallb-system namespace に Operator をインストールすることを推奨します。
				
前提条件
- ベアメタルハードウェアにインストールされたクラスター。
- 
							OpenShift CLI (oc) がインストールされている。
- 
							cluster-admin権限を持つユーザーとしてログインしている。
手順
- 次のコマンドを入力して、MetalLB Operator の namespace を作成します。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- namespace に Operator グループのカスタムリソースを作成します。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Operator グループが namespace にインストールされていることを確認します。 - oc get operatorgroup -n metallb-system - $ oc get operatorgroup -n metallb-system- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME AGE metallb-operator 14m - NAME AGE metallb-operator 14m- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- SubscriptionCR を作成します。- SubscriptionCR を定義し、YAML ファイルを保存します (例:- metallb-sub.yaml)。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- redhat-operators値を指定する必要があります。
 
- SubscriptionCR を作成するには、次のコマンドを実行します。- oc create -f metallb-sub.yaml - $ oc create -f metallb-sub.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- オプション: BGP および BFD メトリックが Prometheus に表示されるようにするには、次のコマンドのように namespace にラベルを付けることができます。 - oc label ns metallb-system "openshift.io/cluster-monitoring=true" - $ oc label ns metallb-system "openshift.io/cluster-monitoring=true"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
検証
						この検証手順は、MetalLB Operator が metallb-system namespace にインストールされていることを前提としています。
					
- インストール計画が namespace にあることを確認します。 - oc get installplan -n metallb-system - $ oc get installplan -n metallb-system- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME CSV APPROVAL APPROVED install-wzg94 metallb-operator.4.17.0-nnnnnnnnnnnn Automatic true - NAME CSV APPROVAL APPROVED install-wzg94 metallb-operator.4.17.0-nnnnnnnnnnnn Automatic true- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注記- Operator のインストールには数秒かかる場合があります。 
- Operator がインストールされていることを確認するには、次のコマンドを入力し、Operator に対して出力に - Succeededと表示されていることを確認します。- oc get clusterserviceversion -n metallb-system \ -o custom-columns=Name:.metadata.name,Phase:.status.phase - $ oc get clusterserviceversion -n metallb-system \ -o custom-columns=Name:.metadata.name,Phase:.status.phase- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.2.3. クラスターでの MetalLB の起動
Operator のインストール後に、MetalLB カスタムリソースの単一のインスタンスを設定する必要があります。カスタムリソースの設定後、Operator はクラスターで MetalLB を起動します。
前提条件
- 
							OpenShift CLI (oc) がインストールされている。
- 
							cluster-admin権限を持つユーザーとしてログインしている。
- MetalLB Operator がインストールされている。
手順
						この手順は、MetalLB Operator が metallb-system namespace にインストールされていることを前提としています。Web コンソールを使用してインストールした場合は、namespace の代わりに openshift-operators を使用してください。
					
- MetalLB カスタムリソースの単一のインスタンスを作成します。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
検証
MetalLB コントローラーのデプロイメントと、MetalLB スピーカーのデーモンセットが実行していることを確認します。
- コントローラーのデプロイメントが稼働していることを検証します。 - oc get deployment -n metallb-system controller - $ oc get deployment -n metallb-system controller- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME READY UP-TO-DATE AVAILABLE AGE controller 1/1 1 1 11m - NAME READY UP-TO-DATE AVAILABLE AGE controller 1/1 1 1 11m- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- スピーカーに設定されているデーモンが実行されていることを検証します。 - oc get daemonset -n metallb-system speaker - $ oc get daemonset -n metallb-system speaker- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE speaker 6 6 6 6 6 kubernetes.io/os=linux 18m - NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE speaker 6 6 6 6 6 kubernetes.io/os=linux 18m- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - この出力例は、6 つの speaker Pod を示しています。クラスターの speaker Pod の数は出力例とは異なる場合があります。出力で各ノードの 1 つの Pod が表示されることを確認します。 
5.2.4. MetalLB のデプロイメント仕様
					MetalLB カスタムリソースを使用して MetalLB のインスタンスを起動すると、MetalLB カスタムリソースでデプロイメント仕様を設定して、controller または speaker Pod がクラスターにデプロイし、実行する方法を管理できます。これらのデプロイメント仕様を使用して、以下のタスクを管理します。
				
- MetalLB Pod デプロイメントのノードの選択
- Pod の優先順位および Pod のアフィニティーを使用したケジューリングの管理
- MetalLB Pod の CPU 制限の割り当て
- MetalLB Pod のコンテナー RuntimeClass の割り当て
- MetalLB Pod のメタデータの割り当て
5.2.4.1. speaker Pod の特定のノードへの限定
						デフォルトでは、MetalLB Operator を使用して MetalLB を開始すると、Operator はクラスター内の各ノードで speaker Pod のインスタンスを開始します。ロードバランサーの IP アドレスをアドバタイズできるのは、speaker Pod を備えたノードのみです。ノードセレクターを使用して MetalLB カスタムリソースを設定し、speaker Pod を実行するノードを指定できます。
					
						speaker Pod を特定のノードに制限する最も一般的な理由として、特定のネットワークにネットワークインターフェイスがあるノードのみがロードバランサーの IP アドレスをアドバタイズするようにすることが挙げられます。ロードバランサーの IP アドレスの宛先として、speaker Pod が実行されているノードのみがアドバタイズされます。
					
						speaker Pod を特定のノードに制限し、サービスの外部トラフィックポリシーに local を指定する場合は、サービスのアプリケーション Pod が同じノードにデプロイされていることを確認する必要があります。
					
speaker Pod をワーカーノードに制限する設定例
						spec.nodeSelector フィールドを使用してマニフェストを適用した後、oc get daemonset -n metallb-system speaker コマンドを使用して、Operator がデプロイした Pod の数を確認できます。同様に、oc get nodes -l node-role.kubernetes.io/worker= のようなコマンドを使用して、ラベルに一致するノードを表示できます。
					
オプションで、アフィニティールールを使用して、ノードがどの speaker Pod をスケジュールするか、スケジュールしないかを制御することができます。また、toleration の一覧を適用してこれらの Pod を制限することもできます。アフィニティールール、テイント、および容認の詳細は、追加のリソースを参照してください。
5.2.4.2. MetalLB デプロイメントでの Pod の優先順位および Pod アフィニティーの設定
						オプションで、MetalLB カスタムリソースを設定して、Pod の優先順位と Pod のアフィニティールールを controller Pod および speaker Pod に割り当てることができます。Pod の優先順位は、ノード上の Pod の相対的な重要度を示し、この優先順位に基づいて Pod をスケジュールします。controller または speaker Pod に高い優先順位を設定して、ノード上の他の Pod よりも優先的にスケジューリングされるようにします。
					
						Pod のアフィニティーは Pod 間の関係を管理します。Pod のアフィニティーを controller または speaker Pod に割り当て、スケジューラーが Pod 関係のコンテキストで Pod を配置するノードを制御します。たとえば、Pod アフィニティールールを使用して、複数の特定 Pod を同じノードまたは別のノードに配置するようにできます。これにより、ネットワーク通信が改善され、これらのコンポーネント間の遅延が縮小されます。
					
前提条件
- 
								cluster-admin権限を持つユーザーとしてログインしている。
- MetalLB Operator がインストールされている。
- クラスター上で MetalLB Operator を開始している。
手順
- myPriorityClass.yamlなどの- PriorityClassカスタムリソースを作成して、優先度レベルを設定します。この例では、- high-priorityという名前の- PriorityClassを、値- 1000000で定義します。この優先クラスが割り当てられた Pod は、スケジューリングにおいて、それより低い優先クラスの Pod より優先順位が高いとみなされます。- apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: 1000000 - apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: 1000000- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- PriorityClassカスタムリソース設定を適用します。- oc apply -f myPriorityClass.yaml - $ oc apply -f myPriorityClass.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- MetalLBPodConfig.yamlなどの- MetalLBカスタムリソースを作成して、- priorityClassNameと- podAffinityの値を指定します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- MetalLB コントローラー Pod の優先クラスを指定します。この場合、high-priorityに設定されます。
- 2
- Pod アフィニティールールを設定していることを指定します。これらのルールは、他の Pod またはノードに関連して Pod がどのようにスケジュールされるかを決定します。この設定は、app: metallbラベルを持つ Pod を同じホスト名を共有するノードにスケジュールするようにスケジューラーに指示します。これは、MetalLB 関連の Pod を同じノード上に配置するのに役立ち、これらの Pod 間のネットワーク通信、遅延、リソース使用量を最適化できる可能性があります。
 
- MetalLBカスタムリソース設定を適用します。- oc apply -f MetalLBPodConfig.yaml - $ oc apply -f MetalLBPodConfig.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
検証
- metallb-systemnamespace の Pod に割り当てた優先クラスを表示するには、次のコマンドを実行します。- oc get pods -n metallb-system -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName - $ oc get pods -n metallb-system -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME PRIORITY controller-584f5c8cd8-5zbvg high-priority metallb-operator-controller-manager-9c8d9985-szkqg <none> metallb-operator-webhook-server-c895594d4-shjgx <none> speaker-dddf7 high-priority - NAME PRIORITY controller-584f5c8cd8-5zbvg high-priority metallb-operator-controller-manager-9c8d9985-szkqg <none> metallb-operator-webhook-server-c895594d4-shjgx <none> speaker-dddf7 high-priority- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- スケジューラーが Pod アフィニティールールに従って Pod を配置したことを確認するには、次のコマンドを実行して Pod のノードのメタデータを表示します。 - oc get pod -o=custom-columns=NODE:.spec.nodeName,NAME:.metadata.name -n metallb-system - $ oc get pod -o=custom-columns=NODE:.spec.nodeName,NAME:.metadata.name -n metallb-system- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.2.4.3. MetalLB デプロイメントでの Pod CPU 制限の設定
						オプションで、MetalLB カスタムリソースを設定することで、Pod の CPU 制限を controller Pod と speaker Pod に割り当てることができます。controller Pod または speaker Pod の CPU 制限を定義すると、ノード上のコンピュートリソースを管理するのに役立ちます。これにより、ノード上のすべての Pod に、ワークロードとクラスターのハウスキーピングを管理するために必要なコンピューティングリソースが確保されます。
					
前提条件
- 
								cluster-admin権限を持つユーザーとしてログインしている。
- MetalLB Operator がインストールされている。
手順
- CPULimits.yamlなどの- MetalLBカスタムリソースファイルを作成し、- コントローラーおよび- speakerPod の- cpu値を指定します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- MetalLBカスタムリソース設定を適用します。- oc apply -f CPULimits.yaml - $ oc apply -f CPULimits.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
検証
- Pod のコンピューティングリソースを表示するには、次のコマンドを実行し、 - <pod_name>をターゲット Pod に置き換えます。- oc describe pod <pod_name> - $ oc describe pod <pod_name>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow