MetalLB を Helm で導入し、必要に応じて Harbor に Chart を保管して管理する考え方を整理します。この記事は MetalLB の L2 / BGP 設計そのものではなく、Helm Chart をどう扱い、どのように導入・更新を管理するかに焦点を置きます。
Kubernetes では、マニフェストを直接適用する方法と、Helm Chart と values で管理する方法があります。MetalLB のような基盤コンポーネントでは、導入時の Chart、values、バージョン、保管場所を明確にしておくと、後から再構築しやすくなります。
この記事の位置づけ
- MetalLB を Helm で導入する操作を整理する
- Harbor に Chart を保管する意味を整理する
- MetalLB の L2 / BGP 設計は別記事に分ける
- Helm release と values を運用管理の対象として扱う
- 古い Chart バージョンをそのまま固定せず、利用時点で確認する
Helm リポジトリを追加する
まず、MetalLB の Helm リポジトリを追加し、Chart を検索します。操作は Kubernetes ノード上である必要はなく、kubectl と helm が使える管理端末で行います。
helm repo add metallb https://metallb.github.io/metallb
helm repo update
helm search repo metallbここで表示される Chart version と App version を確認します。基盤コンポーネントなので、なんとなく最新版を使うのではなく、利用する Kubernetes バージョンとの組み合わせを確認します。
Chart をダウンロードする
Chart を Harbor などへ保管する場合は、まずローカルへ取得します。
mkdir -p ~/work/helm/metallb
cd ~/work/helm/metallb
helm pull metallb/metallb
ls -lダウンロードした .tgz が Helm Chart です。インターネット上のリポジトリから直接導入するだけでなく、検証済みの Chart を Harbor に保管して使うと、再現性を高められます。
values を確認する
インストール前に、既定の values を確認します。
helm show values metallb/metallb > values-default.yaml
sed -n '1,160p' values-default.yamlMetalLB の場合、Chart の values だけで完結する部分と、導入後に IPAddressPool や L2Advertisement、BGPPeer などの CRD で設定する部分を分けて考えます。
Harbor に Chart を保管する意味
Harbor に Chart を保管する目的は、単にファイル置き場を作ることではありません。運用上は、どの Chart をどのクラスタへ入れたのかを追跡しやすくするためです。
- 外部リポジトリに依存せず再インストールできる
- 検証済み Chart を保管できる
- Chart version を固定して管理できる
- オフラインまたは閉域環境でも導入しやすい
- values と合わせて変更履歴を管理しやすい
ただし、Chart だけを Harbor に置いても、values や CRD 設定を別管理にすると再現性は落ちます。Chart、values、MetalLB の IPAddressPool / Advertisement 設定をセットで管理します。
Helm でインストールする
MetalLB を Helm でインストールします。namespace を作成し、release 名を決めて導入します。
kubectl create namespace metallb-system
helm install metallb metallb/metallb -n metallb-system
kubectl get pods -n metallb-system -o wideすでに namespace が存在する場合は、kubectl create namespace は不要です。既存環境では kubectl get ns metallb-system で確認してから進めます。
release を確認する
Helm release と Kubernetes リソースを確認します。
helm list -n metallb-system
helm status metallb -n metallb-system
kubectl get all -n metallb-systemMetalLB は導入しただけでは Service に VIP を払い出しません。導入後に IP アドレスプールと L2 / BGP の広告設定が必要です。
IPAddressPool を設定する
L2 モードの最小例として、IP アドレスプールと L2Advertisement を作成します。
cat <<'EOF' | kubectl apply -f -
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: service-pool
namespace: metallb-system
spec:
addresses:
- 10.1.0.192/27
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: service-l2
namespace: metallb-system
spec:
ipAddressPools:
- service-pool
EOFBGP モードを使う場合は、BGPPeer と BGPAdvertisement を設計します。MetalLB のインストールと、L2 / BGP のネットワーク設計は分けて考える方が安全です。
更新と削除
Helm で導入した場合、更新や削除も Helm release を基準に扱います。
helm upgrade metallb metallb/metallb -n metallb-system
helm uninstall metallb -n metallb-systemただし、CRD や IPAddressPool などのリソースが残る場合があります。削除時は、何が消えて何が残るのかを確認します。
kubectl get ipaddresspool -n metallb-system
kubectl get l2advertisement -n metallb-system
kubectl get bgppeers -n metallb-system運用で管理するもの
- Helm Chart の version
- Helm release 名
- values ファイル
- IPAddressPool
- L2Advertisement または BGPAdvertisement
- Service 側の
externalTrafficPolicy
まとめ
MetalLB を Helm で導入する場合、重要なのはコマンドそのものではなく、Chart、values、release、IP アドレスプール、L2 / BGP 設定を分けて管理することです。Harbor に Chart を保管する場合も、Chart だけではなく values と設定マニフェストを合わせて管理します。
MetalLB はオンプレ Kubernetes で LoadBalancer Service を成立させるための基盤です。Helm は導入管理の仕組みであり、L2 / BGP や VIP 設計は別の責務です。この分離を意識すると、再構築や更新時に混乱しにくくなります。
書籍
Kubernetes完全ガイド 第2版
Kubernetes の仕組み、リソース、ネットワーク、運用観点を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
関連記事
- Kubernetes MetalLB の導入 – LoadBalancer Service をオンプレ環境で成立させる
- Ubuntu 22.04 Kubernetes 管理ツールのインストール – kubectl / Helm / calicoctl を整理する
- Kubernetes で送信元アドレスが変わる問題 – externalTrafficPolicy、hostNetwork、BGP 経路広告で考える
- MicroK8s MetalLB speaker が socket permission denied を出す原因 – L2 / 権限 / ホストネットワークを切り分ける
- Kubernetes クラスター構築 – kubeadm で controlPlaneEndpoint と CNI を整理する




