このページにはベアメタル 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 モードのインストールはこれで終わりです。