手当たり次第に書くんだ

飽きっぽいのは本能

Kubernetes MetalLB を Helm で導入する – Harbor で Chart を管理する考え方

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 ノード上である必要はなく、kubectlhelm が使える管理端末で行います。

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.yaml

MetalLB の場合、Chart の values だけで完結する部分と、導入後に IPAddressPoolL2AdvertisementBGPPeer などの 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-system

MetalLB は導入しただけでは 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
EOF

BGP モードを使う場合は、BGPPeerBGPAdvertisement を設計します。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 を Helm で導入する – Harbor で Chart を管理する考え方

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る