このプロジェクトについて
クラスター全体をInfrastructure-as-Code(IaC)として扱う個人用ホームラボのリポジトリです。スタックはk3s上で動作し、Ansibleのプレイブック、ロール、インベントリが編集可能な信頼できる唯一の情報源(Source of Truth)となります。レンダリングされたDocker ComposeディレクトリはRaspberry Piホスト上にのみ存在します。リポジトリの記録によると、2026年8月14日にメインサーバーノードからDockerがアンインストールされ、Docker Composeからk3sへの移行が完了しました。移行の詳細はアーカイブフォルダに履歴として保管されています。
3つのホストで構成されています。daniel-boxはk3sのコントロールプレーンであり、Traefikエッジ、Authelia SSOおよびOIDCイシュアー、Pi-hole DNS、Longhornストレージ、CrowdSec、パブリックなWireGuardエンドポイントなど、ほぼすべてのワークロードを実行し、Ansibleもここで動作します。daniel-serverはk3sエージェントノードで、Jellyfin/Tdarrのトランスコーディング用のIntel iGPU、LVMストレージ、UPS/NUTシャットダウン処理を備えています。daniel-piは唯一残っているDockerホストで、LAN内限定で運用され、2つ目のWireGuardインスタンスと小規模なユーティリティスタックを実行しています。
イングレスはTraefikに集約され、IngressRoute CRDを通じてルーティングされます。Autheliaはforward-authミドルウェアを介して保護されたルートを制御し、対応するアプリにはOIDCトークンを発行します。パブリックなホスト名はCloudflareがプロキシし、ローカル名はLAN上のPi-holeによって解決されます。READMEには、ネットワークセグメンテーションは全面的に強制されているわけではなく、一部のロールのみがNetworkPoliciesを定義しており、ポリシーが存在する場合でもクラスターCNIによってイングレスルールのみが適用されることが記されています。
デプロイはDockerプレイとk8sプレイに分かれており、どちらも各ホストのcontainers_listによって駆動されます。Dockerプレイは、カスタムのtoposortフィルタとロールごとのmeta/deps.ymlの上流宣言を使用して依存関係グラフを解決し、依存関係が先に起動するようにします。k8sプレイはロールをトポロジカルソートし、ロールテンプレート自体からTraefik(CRDインストール用)やAuthelia(ミドルウェア用)へのエッジを導出します。テンプレートに含まれないエッジには明示的なdepends_onを使用します。フィルタはpre-commitフック内のpytestでユニットテストされます。単一サービスのデプロイ、ドライラン、一括デプロイ、Piターゲット用のコマンド、および個別のセットアップ用プレイブックが文書化されています。
横断的な関心事として、実行時に復号されるSOPS/age暗号化シークレット(pre-commitでのgitleaksチェックと帯域外キーバックアップを含む)、コードとしてプロビジョニングされたダッシュボードを備えたPrometheus、Grafana、Loki、Tempoによるオブザーバビリティ、Backblaze B2へのLonghornスケジュールバックアップ(ボリュームごとの階層化と災害復旧手順を含む)、Renovateによるイメージバージョンとフックのリビジョンの自動更新、およびAuthelia TOTP/OIDC、ノードごとのCrowdSecエージェント、fail2ban、UFWのデフォルト拒否設定などのセキュリティツールが含まれます。
品質ゲートは、YAML/JSON lint、ansible-lint、gitleaks、レンダリング済みテンプレートの検証、シークレットローテーションのレジストリ同期、ruff、pytestをカバーするpre-commitツールによって実行されます。k8sロール(Deployment/Service/IngressRoute/PVCマニフェストのレンダリング)またはPi用のDockerロールとして新しいサービスを追加するためのガイドラインも含まれています。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.