「おうちクラウド」を構成する機材たちの小噺

この記事は whywaita Advent Calendar 2025 9日目の記事です

皆さん、自宅サーバーやっていますか?

私が自宅サーバーを始めたのは、実はかれこれ10年以上前の話でして、最初は使い古されたネットブックに CentOS 6 を入れ、Hamachi で VPN を構築した上で、Minecraft サーバーを建てて遊んでいたものです。

このブログでも、何度か話題が上がっていますが、検証環境だったり、このブログなどの小物をデプロイするのに、現在は Kubernetes をベースとした自宅サーバー環境を構築しているので、この機会にご紹介します!

ハードウェア・ネットワーク

ハードウェア的には、いわゆる「逸般の誤家庭」とは違い、YAMAHA ルーターがあったりとか、F5 のロードバランサーが置いてあったりとかはしません。
普通の PC だのラズパイが並んでいるだけです。
一般人はデスクトップ PC を 2 台以上持たないぞ」と言われればそうかもとは思いますが、一般的に手に入る機材のみで構成されているあたりは、まだ一般だと思っています。

(ラズパイ含めた)ノードは全てで11台あります(確かに一般のご家庭ではない)
こんな感じの内訳です

  • Compute Node × 3
  • Control Plane × 3
  • Worker Node × 3
  • ルーター × 1
  • ロードバランサー × 1

純粋な VM に使えるリソースとしては、合計で 22コア(44スレッド) / 144GB RAM です。

VyOS を使いルーターを構築しており、用途別に VLAN を切っているほか、HomeNOC へ接続を行い、グローバル IP アドレスの割り当てを受けています。

基本的には 1GbE ですが、Storage Network のみは 10GbE でリンクしており、後述する Ceph クラスタのデータ伝送はより広い帯域で行えるようになっています。

Ceph / Platform Cluster

Worker Node × 3 と Compute Node × 3 で Ceph Cluster を構築しています。
この Ceph は、後述する Platform Cluster と呼ぶ Kubernetes クラスタにおける永続ストレージや、Cinder Volume のバックエンドとして、ブロックストレージを提供しています。

主に VM がブートボリュームとして使うことから、Compute Node に 10GbE カードを刺した上で、NVMe の 1TB SSD を1枚ずつ刺してクラスタにしています。

ラズパイ × 3 を Control Plane とし、Kubernetes クラスタを構築しています。
OpenStack Helm を使い、各種コンポーネントがデプロイされています。

Platform Cluster 自体もベアメタルの Kubernetes クラスタですが、公開するアプリケーションなどは VM を使って構築する別の Kubernetes クラスタ(Workload クラスタ)にデプロイしています。

Workload クラスタの設定を Kubernetes リソースとして管理するための、ClusterAPI Provider が動いており、クラスタの作成・更新・削除を容易にしています。
🐻 →「森の中」ということで、「FKE (in-Forest (K)Container Engine)」と呼んでいます。

その他のエコシステム

その他、Platform Cluster 上には様々なコンポーネントが動いています。

  • IP アドレス管理サーバー
    • IP アドレスはスプレッドシートで管理しており、払い出しや返却などの管理をするためのサーバーが動いています
    • ソースコード公開しています (https://github.com/bear-san/ipman)
  • HashiCorp Vault + VaultAuthController
    • シークレット管理のための、HashiCorp Vault がデプロイされています
    • Workload クラスタから Vault のシークレットにアクセスできるよう、認証・認可の設定が自動で行える Custom Controller が動いています
    • これにより、Workload クラスタ上の External Secrets Operator などから Vault のシークレットを利用できるようになっています
  • Kubernetes OIDC Delegator
    • Workload クラスタの JWKs Endpoint を公開するためのサーバーが動いています
    • IRSA などを利用する際は、Kubernetes の ServiceAccount Token を検証する必要がありますが、その際にアクセスされます
    • ソースコード公開しています (https://github.com/bear-san/kubernetes-oidc-delegator)
  • OPNsense Configurator
    • ロードバランサーとして OPNsense を利用していますが、その設定を API 越しに行えるように、gRPC でラッパーを提供しています
    • ClusterAPI でクラスタを構築するときや、type: LoadBalancer Service を作成するときなど、プログラムからロードバランサーの設定ができるようになっています
  • Harbor
    • 言わずもがな、コンテナレジストリです
    • 元々は Docker Pro を契約して、Docker Hub 上に Image を上げていましたが、ストレージの有効活用も兼ねて、Harbor をセルフホストしています
    • Harbor の認証エンドポイントをジャックして、事前に登録した IdP の JWT を使って Harbor の Image Pull/Push ができるようにしています
      これにより、GitHub Actions から簡単に Image Push できるようにしたり、Credential Provider を実装して、Workload クラスタから簡単に Image Pull できるようにしています
    • なお、Harbor の認証をジャックするためのサーバーの Image は ECR に上げています
  • FKE Server
    • Workload クラスタの kube-apiserver の認証を行うためのサーバーを構築しています
      手で作った Kubernetes クラスタの認証は TLS 証明書で行うことが多いと思いますが、FKE Server が発行した API トークンで認証できるようにしている他、簡単な ABAC 機能を持っています
    • FKE Server 自体には、個人で運用している Google Workspace から SSO できるようになっており、gcloud コマンドのように kubeconfig をローカルに保存することもできます
    • これにより、Workload クラスタを作った後の利用を簡単にしています

まとめ

かなり駆け足でしたが、OSS を組み合わせたり、自身でカスタマイズしたりした結果、おうちサーバーというよりは「おうちクラウド」と呼んでも差し支えなさそうなエコシステムを構成しています。

ちなみに電気代ですが、大体 250W 前後を行ったり来たりしているので、1ヶ月フルで動かして概ね 7,000円くらいでしょうか。(結構するな・・・)

もっとも、このスペックをパブリッククラウドで用意する場合、とても個人で払えないくらいの高額な料金となりますし、この検証環境で得られる知見はそのまま仕事にも FB できるので、自宅サーバーをやる価値は大いにあると考えています。

このようにエコシステムを組み立てていって、それぞれが連携していくところを見ているのはとても楽しいですし、皆さんも一家に1環境、「おうちクラウド」してみてはいかがでしょうか?

タイトルとURLをコピーしました