今回は自宅の Kubernetes クラスター に MetalLB を導入してみました。
環境
今回の環境は下記のとおりです。
開発端末
- OS: Windows 11 Pro
- CPU: Intel Core i7-9750H
- メモリ: 64GB
- GPU: NVIDIA GeForce RTX 2070 Max-Q
Kubernetes クラスター
- Master Node:Raspberry Pi 4 (8GB) x3
- Worker Node:Raspberry Pi 4 (8GB) ×3
- Worker Node:Raspberry Pi 400 (4GB) ×1
- Load Balancer:MetalLB
- Helm:v3.12.3
- NFS Server:Raspberry Pi 4 (4GB)
- ルーター: NanoPi R5C(OS:FriendlyWrt)
※NanoPi R5C および FriendlyWrt については下記を参考にしてください。
MetalLB の導入
MetalLB を導入するにあたって、 Helm を利用しています。
なお、 Raspberry Pi へ Helm を導入する方法については、下記の記事を参考にしてください。
root ユーザーに昇格
事前に root ユーザーに昇格しておきます。
su root
ARP の許可設定
変更前の確認を行い、異なる箇所を出力します。
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e ""s/strictARP: false/strictARP: true/"" | \
kubectl diff -f - -n kube-system
変更を適用します。
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e ""s/strictARP: false/strictARP: true/"" | \
kubectl apply -f - -n kube-system
作業ユーザーに戻る
exit
リポジトリの追加
リポジトリの追加を行います。
sudo helm repo add metallb https://metallb.github.io/metallb
Helm チャートリポジトリの更新
リポジトリの追加を行ったので、チャートリポジトリの最新情報を取得するために更新を行います。
sudo helm repo update
MetalLB のインストール
helm install
コマンドを利用して、 MetalLB のインストールを行います。
sudo helm install metallb metallb/metallb -n metallb-system \
--namespace metallb-system --create-namespace
定義ファイル保存ディレクトリの作成
IPアドレスプールの定義ファイルを保存するためのディレクトリを作成します。
mkdir -p ~/kubernetes/metallb
IPアドレスプールの定義ファイルの作成
IPアドレスプールの定義ファイルを作成します。
sudo nano ~/kubernetes/metallb/ipaddresspool.yml
ipaddresspool.yml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: default
namespace: metallb-system
spec:
addresses:
- 192.168.10.200-192.168.10.254
autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: default
namespace: metallb-system
spec:
ipAddressPools:
- default
addresses
の 192.168.10.200-192.168.10.255
の部分はご自身のネットワーク環境にあわせて変更してください。
IPアドレスプールのデプロイ
IPアドレスプールの定義ファイルを作成したら、デプロイします。
sudo kubectl apply -f ~/kubernetes/metallb/ipaddresspool.yml
参考文献
下記のサイトを参考にさせて頂きました。