おうちKubernetesをはじめる(HA編)
概要
ついに、本当のHAおうちKubernetesクラスターの構築に取り組みます。
HAとは、High Availability、つまり高可用性を意味します。
最初は、ラズパイ3台でコントロールプレーン・ワーカーを含むクラスターを構築しました。
次に、ラズパイ3台のコントロールプレーン+x86(amd64)のPC 1台のワーカーを設けるKubernetesクラスターを構築しました。
(便宜上、ここではこれを半HA構成と呼んでいます)
いざ使い始めようとしたところ、上記で構築した半HA構成にはいろいろと課題がありました。
Kubernetesクラスターに実用的なアプリケーションをデプロイするにはKubernetes内のLoad Balancerサービスや、PV(Persist Volume)が必要になってきます。
Load BalancerとしてMetalLB、PVとして Longhorn、Rook Ceph などの分散ストレージの導入を試みましたがうまく行きませんでした。
そこで、ワーカーを3台設ける構成で構築し直すことにしました。
CalicoはMetalLBと相性が悪いことも学んだため、今回CNIはCiliumを使用します。
このやり方でも上手く行くという確証はありませんでしたが、結果的には動作するものを構成することができました。
構成
写真
ラズパイ4のケースは、タカチ電機工業の RPH-4B-H-B をチョイスしました。
当初はクラスターケースを検討していましたが、静音性・放熱性を考えると、ファン付きのクラスターケースよりは、全体がヒートシンクと言えるようなケースに個別に格納する方が優れていると考えました。
左から、Nuro光のモデム、ONUと一緒に並んでいるのがOpenWrtがインストールされたルーターBUFFALO WZR-1750DHP(無線LANは無効)であり、haproxyやFRR(FRRouting)を動作させます。
ハードウェア
3台のラズパイと3台のPC(Chromebox改)、OpenWrtをインストールした1台のルーターを使用します。
- Raspberry Pi 4 Model B RAM 8GB 3台
- ASUS Chromebox3 i7-8550U 16GB RAM, 256GB NVMe SSD) 3台
- BUFFALO WZR-1750DHP (OpenWrtをインストール。更にOpenWrtにhaproxy、FRRをインストール)
ソフトウェア
- Ubuntu 22.04
- Kubernetes v1.29 (v1.29.6)
- Cilium v0.16.10
ブロック図
詳細
ポイントは下記となります。
(用語は間違っている可能性がありますので、私の誤認識がありましたらご指摘いただけると幸いです。)
- ラズパイ3台のコントロールプレーンとする
- x86(amd64)のPC 3台をワーカーとする
- OpenWrtにてサブネットを構成する
- OpenWrtにインストールしたロードバランサー(haproxy)を使用してコントロールプレーンを冗長化し、サブネット外から利用可能にする
- CNIとしてCiliumを使用する
- ワーカー3台に対し、それぞれストレージの一部を未フォーマットのRawパーティションとして確保する
- Rook/CephをKubernetesクラスターにデプロイし、上記のRawパーティションを使用して分散ストレージを構成する
- MetallbをKubernetesクラスターにデプロイし、BGPモードで使用する
- MetallbがServiceやIngressの役割を担い、そこから払い出されたIPアドレスを広報する
- Ingress-Nginx ControllerをKubernetesクラスターにデプロイする
- OpenWrtのルーティング(FRRouting)を使用してMetallbが広報するIPアドレスをサブネット内で利用可能にする
- (OpenWrtにインストールしたロードバランサー(haproxy)を使用してServiceやIngressで払い出されたIPアドレス/ポートをサブネット外から利用可能にする)
詳細は下記の通りです。
おわりに
今回、3台のラズパイと3台のPC、OpenWrtをインストールした1台の小型ルーターを用いてHA(High availability) おうちKubernetesクラスターの構築ができました。
また、この構成に対し、Rook ceph による Storage の追加、Metallb による Load Balancer の追加、Ingress-Nginx Controller の追加を行うことができました。
そして、このクラスターにhelmチャートを使用してPostgresqlやThingsBoardをデプロイすることができました。
ここまで来てやっと、業務で使用しているマネージドKubernetes(AKS、EKS、GKEなど)向けのお試し検討ができるクラスターができました。
Discussion