26.2. MetalLB Operator のインストール

クラスター管理者は、Operator がクラスター上の MetalLB インスタンスのライフサイクルを管理できるようにする MetallB Operator を追加できます。

インストール手順では、metallb-system namespace を使用します。Operator をインストールし、カスタムリソースを別の namespace に設定できます。Operator は、Operator がインストールされている同じ namespace で MetalLB を起動します。

MetalLB および IP フェイルオーバーは互換性がありません。クラスターの IP フェイルオーバーを設定している場合、Operator をインストールする前に IP フェイルオーバーを削除する 手順を実行します。

26.2.1. Web コンソールを使用した OperatorHub からの MetalLB Operator のインストール

クラスター管理者は、OpenShift Container Platform Web コンソールを使用して MetalLB Operator をインストールできます。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. オプション: MetalLB Operator に必要な namespace を作成します。

    注記

    この段階で namespace を作成するか、MetalLB Operator のインストールを開始するときに作成するかを選択できます。Installed Namespace リストから、プロジェクトを作成できます。

    1. AdministrationNamespaces に移動し、Create Namespace をクリックします。
    2. Name フィールドに metallb-system と入力し、Create をクリックします。
  3. MetalLB Operator をインストールします。

    1. OpenShift Container Platform Web コンソールで、OperatorsOperatorHub をクリックします。
    2. Filter by keyword フィールドに metallb と入力して、MetalLB Operator を検索し、Install をクリックします。

      また、インフラストラクチャー機能 でオプションをフィルターすることもできます。たとえば、非接続環境 (ネットワークが制限された環境ともしても知られる) で機能する Operator を表示するには、Disconnected を選択します。

    3. Install Operator ページで、a specific namespace on the cluster を選択します。前のセクションで作成した namespace を選択するか、metallb-system プロジェクトを作成することを選択して、Install をクリックします。

検証

MetalLB Operator が正常にインストールされたことを確認するには、以下を行います。

  1. OperatorsInstalled Operators ページに移動します。
  2. MetalLB OperatorSucceededStatusmetallb-system プロジェクトにリストされていることを確認します。

    注記

    インストール時に、Operator は Failed ステータスを表示する可能性があります。その後インストールが成功し、Succeeded メッセージが表示された場合は、Failed メッセージを無視できます。

  3. Operator のインストールが成功しない場合は、さらにトラブルシューティングを行うことができます。

    1. OperatorsInstalled Operators ページに移動し、Operator Subscriptions および Install Plans タブで Status にエラーがあるかどうかを検査します。
    2. WorkloadsPods ページに移動し、metallb-system プロジェクトの Pod のログを確認します。

26.2.2. CLI を使用した OperatorHub からのインストール

OpenShift Container Platform Web コンソールを使用する代わりに、CLI を使用して OperatorHub から Operator をインストールできます。oc コマンドを使用して、Subscription オブジェクトを作成または更新します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてログインしている。

手順

  1. MetalLB Operator が利用可能であることを確認します。

    $ oc get packagemanifests -n openshift-marketplace metallb-operator

    出力例

    NAME               CATALOG                AGE
    metallb-operator   Red Hat Operators      9h

  2. metallb-system namespace を作成します。

    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: Namespace
    metadata:
      name: metallb-system
    EOF
  3. オプション: BGP および BFD メトリックが Prometheus に表示されるようにするには、次のコマンドのように namespace にラベルを付けることができます。

    $ oc label ns metallb-system "openshift.io/cluster-monitoring=true"
  4. namespace に Operator グループのカスタムリソースを作成します。

    $ cat << EOF | oc apply -f -
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: metallb-operator
      namespace: metallb-system
    spec:
      targetNamespaces:
      - metallb-system
    EOF
  5. Operator グループが namespace にインストールされていることを確認します。

    $ oc get operatorgroup -n metallb-system

    出力例

    NAME               AGE
    metallb-operator   14m

  6. MetalLB Operator にサブスクライブします。

    1. 以下のコマンドを実行して OpenShift Container Platform のメジャーおよびマイナーバージョンを取得します。値を使用して、次の手順で channel 値を設定します。

      $ OC_VERSION=$(oc version -o yaml | grep openshiftVersion | \
          grep -o '[0-9]*[.][0-9]*' | head -1)
    2. Operator のサブスクリプションカスタムリソースを作成するには、以下のコマンドを入力します。

      $ cat << EOF| oc apply -f -
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: metallb-operator-sub
        namespace: metallb-system
      spec:
        channel: "${OC_VERSION}"
        name: metallb-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
      EOF
  7. インストール計画が namespace にあることを確認します。

    $ oc get installplan -n metallb-system

    出力例

    NAME            CSV                                                 APPROVAL    APPROVED
    install-wzg94   metallb-operator.4.10.0-nnnnnnnnnnnn   Automatic   true

  8. Operator がインストールされていることを確認するには、以下のコマンドを入力します。

    $ oc get clusterserviceversion -n metallb-system \
      -o custom-columns=Name:.metadata.name,Phase:.status.phase

    出力例

    Name                                                Phase
    metallb-operator.4.10.0-nnnnnnnnnnnn   Succeeded

26.2.3. クラスターでの MetalLB の起動

Operator のインストール後に、MetalLB カスタムリソースの単一のインスタンスを設定する必要があります。カスタムリソースの設定後、Operator はクラスターで MetalLB を起動します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてログインしている。
  • MetalLB Operator をインストールしている。

手順

  1. MetalLB カスタムリソースの単一のインスタンスを作成します。

    $ cat << EOF | oc apply -f -
    apiVersion: metallb.io/v1beta1
    kind: MetalLB
    metadata:
      name: metallb
      namespace: metallb-system
    EOF

検証

MetalLB コントローラーのデプロイメントと、BareLB スピーカーのデーモンセットが実行していることを確認します。

  1. コントローラーのデプロイメントが稼働していることを確認します。

    $ oc get deployment -n metallb-system controller

    出力例

    NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    controller   1/1     1            1           11m

  2. スピーカーに設定されているデーモンが実行していることを確認します。

    $ oc get daemonset -n metallb-system speaker

    出力例

    NAME      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
    speaker   6         6         6       6            6           kubernetes.io/os=linux   18m

    この出力例は、6 つの speaker Pod を示しています。クラスターの speaker Pod の数は出力例とは異なる場合があります。出力で各ノードの 1 つの Pod が表示されることを確認します。

26.2.3.1. speaker Pod の特定のノードへの限定

デフォルトでは、MetalLB Operator を使用して MetalLB を開始すると、Operator はクラスター内の各ノードでspeakerPod のインスタンスを開始します。ロードバランサーの IP アドレスをアドバタイズできるのは、speaker Pod を備えたノードのみです。ノードセレクターを使用して MetalLBカスタムリソースを設定し、speakerPod を実行するノードを指定できます。

speaker Pod を特定のノードに制限する最も一般的な理由として、特定のネットワークにネットワークインターフェイスがあるノードのみがロードバランサーの IP アドレスをアドバタイズするようにすることが挙げられます。ロードバランサーの IP アドレスの宛先として、speaker Pod が実行されているノードのみがアドバタイズされます。

speaker Pod を特定のノードに制限し、サービスの外部トラフィックポリシーにローカル を指定する場合は、サービスのアプリケーション Pod が同じノードにデプロイされていることを確認する必要があります。

speaker Pod をワーカーノードに制限する設定例

apiVersion: metallb.io/v1beta1
kind: MetalLB
metadata:
  name: metallb
  namespace: metallb-system
spec:
  nodeSelector:  <.>
    node-role.kubernetes.io/worker: ""
  speakerTolerations:   <.>
  - key: "Example"
    operator: "Exists"
    effect: "NoExecute"

<.> 設定例では、スピーカー Pod をワーカーノードに割り当てるように指定していますが、ノードまたは任意の有効なノードセレクターに割り当てたラベルを指定できます。<.> この設定例では、この容認がアタッチされている Pod は、operator を使用して キー 値と effect 値に一致するテイントを容認します。

spec.nodeSelectorフィールドを使用してマニフェストを適用した後に、oc get daemonset -n metallb-systemspeaker コマンドを使用して Operator がデプロイした Pod の数を確認できます。同様に、oc get node -l node-role.kubernetes.io/worker =のようなコマンドを使用して、ラベルに一致するノードを表示できます。

オプションで、アフィニティールールを使用して、ノードがどの speaker Pod をスケジュールするか、スケジュールしないかを制御することができます。また、容認の一覧を適用してこれらの Pod を制限することもできます。アフィニティールール、テイント、および容認の詳細は、追加のリソースを参照してください。

関連情報

26.2.4. 次のステップ