おうちクラスタのGitOps化のカバー画像
おうちクラスタのGitOps化
2026/6/27
このエントリーをはてなブックマークに追加

前回の記事でHarvesterを導入してRancherでゲストクラスタを建てるところまでやった。あれからネットワークの10G化でルーターを入れ替えて、ストレージ増設のためにクラスタも初期化したので、どうせならと構成を一から見直しました。

ルーターはCiscoからVyOSへ、クラスタはゲスト方式からホスト直接利用へ、デプロイは手動helmからArgoCDのGitOpsへ。だいぶ別物になったのでまとめます。

前回までの構成

前回まではこういう形。

旧構成図

Harvesterの上にRancher用VM(k3s)を立てて、そこからNode DriverでワーカーVM3台のゲストRKE2クラスタを作る構成。動いてはいたけど、物理1台の上にVM4台建ててそのうち3台でHA風クラスタを組んでも「物理が死んだら全部死ぬ」ので、冗長の意味がない。Rancherを飼うためだけにVMが1台必要なのも微妙だった。

ホストクラスタ直接利用

今回の一番大きい変更がこれ。Harvesterに内蔵されているRKE2クラスタ(ホストクラスタ)にアプリを直接載せることにしました。

現構成図

もともとのモチベーションは物理構成への依存を減らしたいということだった。ゲストクラスタ方式はVM単位の障害に耐えられるのがメリットだけど、実際にはそこまで恩恵が大きくない割に、構成の複雑化やストレージ効率の悪化が目立っていました。

ホストクラスタの直接利用でも、Harvesterノードを追加すればそのままクラスタのノードとして参加してくれて、Podも良い感じにオーケストレーションされる。ゲストクラスタレベルまで抽象化しなくても、ノードの追加・削除で十分スケールできることに気付いた。
ホストクラスタにアプリケーションをデプロイして利用するのはHarvester的には非推奨なのが注意。今回はホームラボなので許容としてます。

実際やってみたら Pod/Serviceネットワーク(Canal)もLonghornもそのまま使えて、RancherのCAPIと格闘する必要もない。Harvester組み込みのUIとkubectlで管理は十分だし、Rancher VMに割いてたリソースも浮いた。
CNIにCilium使いたい気持ちもあったけど、興味があるだけだったのでまあこれで良いかな。という気持ちに。

LoadBalancerはHarvester内蔵のkube-vipがネイティブで対応していて、MetalLBとかは不要。Serviceにアノテーションで固定IPを指定すればARP広告してくれる。外部公開はVyOSで80/443をこのLB IPにポートフォワードする形。一部のinternal向けサービス(ArgoCDのUIとか)だけHarvester上の別のVM経由でCloudflare TunnelでIP制限をかけて公開している。

VyOSに移行

10G対応のためにCiscoからVyOS 1.5に入れ替えた。10Gが主目的なので機能的にはCiscoと同等で十分だったけど、結果的にゾーンベースファイアウォールで4つのVLANにきれいに分離できて満足。

R86SにVyOSを入れて使っていますが今のところ安定稼働しています。
別件でパフォーマンスの問題もあったものの多少改善はしていて、それはこちらにまとめています。
VyOS VM間のネットワーク帯域を改善する

インターネット接続はv6プラス固定IPで、IPv6上にipip6トンネルを張って固定IPv4を受ける形。

GitOps化(ArgoCD)

手動のhelmデプロイをやめてArgoCDを入れた。masterにpushするだけで全サービスが反映される。

GitOpsフロー図

App-of-Appsパターンで apps/root.yaml から配下のApplicationを一元管理している。upstream Helmチャートはmulti-sourceでリポジトリのvaluesファイルと組み合わせる形。syncPolicyはautomated + prune + selfHealで、pushしたら勝手に同期されていく。

実はArgoCD導入からアプリのApplication定義まで、かなりの部分をClaude(AI)にお願いしてみた。インフラをAIに触らせるの怖いな〜と思いつつ、L3のネットワーク周りも含めて全部ぶん投げてみたら意外とちゃんと動いている。

Sealed Secrets

シークレット管理はSOPS + GCP KMSからSealed Secretsに移行した。kubesealで暗号化したSealedSecretをGitにコミットすれば、クラスタ内のcontrollerが復号してSecretに変換してくれる。

ArgoCD(GitOps)との相性がいいのはもちろんだけど、個人的にはGCP KMSへの依存を切れたのが一番うれしい。なるべくオンプレで完結しているほうが安心感がある。

今後

物理マシンをもう1台追加してLonghornのレプリカを上げるのと、Longhornバックアップの定期スケジュール設定もやりたい。

全体的にシンプルになって管理しやすくなった。インフラもサービスも含め宣言的になった感じがあり、把握もしやすくなったのが良い感じ。
マルチサイトもそのうちやりたいけどどうしようかな。と考えています。
サーバーを家とは別の場所に置いているので家とでマルチサイトにして経路障害時はファイルオーバーしたり、ディスクIOヘビーなサービスは家側に寄せてみたりとか出来るともっと快適になりそう。

おうちクラスタのGitOps化 - ねこの部屋