MetalLB L2 モードのインストール手順

このページにはベアメタル Kubernetes 環境向けのロードバランサーである MetalLB L2 モードのインストール手順について書かれています。

MetalLB L2 モード #

MetalLB の説明は 公式ドキュメントをご参照ください。 ここでは MetalLB L2 モードの起動方法を説明します。

MetalLB のインストレーション #

事前準備 #

kube-proxy に IPVS を利用している場合は、 公式ドキュメントの preparation を確認してください。

K3s を利用している場合は、 公式ドキュメントの Issues with K3s に記載されているように Klipper LB を無効化する必要があります。 Klipper LB の無効化方法は こちらで紹介しています。

マニフェストによるインストール #

公式ドキュメントの Installation By Manifest に従って、下記を実行します。

$ RELEASE=0.10.2  # このメモを記載時の最新バージョンなので、適宜最新バージョンに変更してください
$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v${RELEASE}/manifests/namespace.yaml
$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v${RELEASE}/manifests/metallb.yaml

なお、v0.9.x では memberlist という名前の Secret リソースを作成する必要がありましたが、 v0.10.0 では自動的に作成するようになりました。

リソース作成後はこのようなリソースが出来上がります。

$ kubectl get ds,deployment,secret,rolebinding,role,serviceaccount,podsecuritypolicy -n metallb-system -o wide

NAME                     DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE   CONTAINERS   IMAGES                            SELECTOR
daemonset.apps/speaker   5         5         5       5            5           kubernetes.io/os=linux   24h   speaker      quay.io/metallb/speaker:v0.10.2   app=metallb,component=speaker

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                               SELECTOR
deployment.apps/controller   1/1     1            1           24h   controller   quay.io/metallb/controller:v0.10.2   app=metallb,component=controller

NAME                            TYPE                                  DATA   AGE
secret/controller-token-9bnkd   kubernetes.io/service-account-token   3      24h
secret/default-token-8dpq7      kubernetes.io/service-account-token   3      25h
secret/memberlist               Opaque                                1      25h
secret/speaker-token-45qxk      kubernetes.io/service-account-token   3      24h

NAME                                                   ROLE                  AGE   USERS   GROUPS   SERVICEACCOUNTS   
rolebinding.rbac.authorization.k8s.io/config-watcher   Role/config-watcher   24h                    /controller, /speaker
rolebinding.rbac.authorization.k8s.io/controller       Role/controller       24h                    /controller       
rolebinding.rbac.authorization.k8s.io/pod-lister       Role/pod-lister       24h                    /speaker

NAME                                            CREATED AT
role.rbac.authorization.k8s.io/config-watcher   2021-08-22T15:36:13Z
role.rbac.authorization.k8s.io/controller       2021-08-22T15:36:13Z
role.rbac.authorization.k8s.io/pod-lister       2021-08-22T15:36:13Z

NAME                        SECRETS   AGE
serviceaccount/controller   1         24h
serviceaccount/default      1         25h
serviceaccount/speaker      1         24h

NAME                                  PRIV    CAPS      SELINUX    RUNASUSER   FSGROUP     SUPGROUP    READONLYROOTFS   VOLUMES
podsecuritypolicy.policy/controller   false             RunAsAny   MustRunAs   MustRunAs   MustRunAs   true  configMap,secret,emptyDir
podsecuritypolicy.policy/speaker      true    NET_RAW   RunAsAny   RunAsAny    RunAsAny    RunAsAny    true  configMap,secret,emptyDir


$ kubectl get ns,clusterrole | grep -i metallb 
namespace/metallb-system    Active   25h
clusterrole.rbac.authorization.k8s.io/metallb-system:controller                                              2021-08-22T15:36:13Z
clusterrole.rbac.authorization.k8s.io/metallb-system:speaker                                                 2021-08-22T15:36:13Z

L2 モードの設定 #

公式ドキュメント Layer 2 Configuration に従って ConfigMap リソースを作成します。

マニフェストファイルは公式ドキュメントをコピーして addresses のみ変更します。

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.240-192.168.1.250 <- 任意の範囲に変更する    

マニフェストに従ってリソースを作成します。

$ kubectl apply -f configmap.yaml

L2 モードのインストールはこれで終わりです。