おうちKubernetesで何をやるか

Kubernetesに興味はある。自宅サーバーもやってみたい。だけど動かしたいサービスがない。
以下の記事を公開した際、そんな声が多く届きました。

https://qiita.com/takumi3488/items/2eb4692a5672ee475998

この記事はそんな方々のために、おうちKubernetesで動かした方が良いサービスを列挙していきます。

## 前提

↑の記事と同じく、可用性については考えない前提で行きます。自分・身内用だと思ってください。
以下のメリット・デメリットを加味した上で、おうちKubernetesに特に向いているサービスを選定しました。

### おうちKubernetesのメリット（対クラウド）

- ストレージ料金が安い
- CPU/メモリ料金も安い
    - N100/8GB/500GBのミニPCを2万円弱で買って5年動かせば、電気代込みでも月あたり400円程度
    - 完全に同じスペックで比較するのは難しいが、例えばKAGOYA CLOUD VPSの3core/3GB/400GBインスタンスは月額1760円
- ネットワーク料金が普通は無料
- 自宅内からアクセスするのであれば非常に高速
- GPUも安いと言えば安い
    - 初期コストはかかるがランニングコストは電気代だけになるので、すぐにクラウドよりも安くなる
- クラウド依存ではないKubernetesの機能の知識が身に付く

### おうちKubernetesのデメリット（対クラウド）

- 学習コスト・運用コストがクラウドと比較して高い
    - 要するに勉強も兼ねていると思ってやらないとコスパが悪い
- 完全無料にはならない
    - クラウドで完全無料になる構成でサービスが完結するのであれば、運用コストも加味してクラウドの方が向いていると言える

すなわち、おうちKubernetesに向いているサービスとは

- 大容量系
    - ファイル管理や動画配信系のサービス
    - 自宅で使う場合には高速なローカルネットワークを使えるため特に相性が良い
    - メモリも容量単価がクラウドより安いので、インメモリデータベースであっても大容量化しやすい
- CPUヘビー系
    - 複数コアCPUを使ったヘビーなコンピューティング処理が必要なサービス
- 長時間GPU系
    - GPUを長時間使うような、AI学習や動画エンコード等が必要なサービス
    - GPUを単発でスポット的に使う場合にはクラウドの方が料金的に有利です

あたりに絞られます。1つでもそれに合致するサービスを動かすのであれば、余ったCPU/メモリを使って

- 有料SaaSの代替アプリケーション

をついでに動かすメリットもでてきます。

Kubernetesを使わない自宅サーバーと同じだと思うかもしれませんが、これをPull型のGitOpsでできること等のメリットが大きいです。

そんな訳で、その3+1つに分けて紹介していきます。

## 大容量系

### NextCloud

https://nextcloud.com/

Dropbox代替のOSSです。直感的なUIで非エンジニアでも操作しやすく、個人的には友人間の大容量ファイル(TRPGの録画とか)共有等でお世話になりました。

### MinIO

https://min.io/

S3代替のOSSです。コンソール画面もありますが出来はあまり良くないので、CLIや他アプリケーション連携用にはなります。

### Supabase

https://supabase.com/

Firebase代替のOSSです。いろいろできますが、便利なAPI付きのデータベースとして使う人が多そうなのでここに。Webやモバイル用のクライアントライブラリは提供されていますが、サーバー用は充実しているとは言いづらいので、好みは分かれそうなところ。
S3互換のオブジェクトストレージも持っているため、MinIOが使いづらければSupabaseを入れるという選択肢もあります。

### Mailu

https://mailu.io/

全部入りのメールサーバーです。Gmailのバックアップ用の転送先として使ったり、捨てメアドとして使ったり色んなことができます。ちゃんとしたメールのやり取りに使うには、おうちKubernetesでは可用性に難があるかもしれません。
似たOSSとしてRainLoopがあります。そちらはUIが綺麗なのですが、更新が止まっているのとDockerがサポートされていないっぽいので少し敷居は高いかもしれません。

### yt-dlp Web UI

https://github.com/marcopeocchi/yt-dlp-web-ui

Web UI付きのyt-dlpです。DockerやDockerComposeでの使用を想定しているようで、ローカルパスを指定してそこにダウンロードして終わりになってしまい、自宅サーバー的には若干使い勝手が悪いかもしれません。ダウンロードが完了したらMinIOにアップロードするような形にしても良いかもしれません。

## CPUヘビー系

### GitLab

https://about.gitlab.com/

GitHub代替。Gitリポジトリとしての機能は言わずもがな、コンテナレジストリやPages等の便利機能が色々入っていますが、一番はCI/CDだと思ったのでここに入れました。高性能なサーバーを使ってCPUを多めに割り当てれば、ビルドやテストが劇的に速くなります。

### Github Self-hosted runner

https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners

独立したサービスではないですが、GitLabと同じくCPUを多めに割り当てることで高速なCI/CDが実現できます。Kubernetesオペレーターが用意されており、Kubernetes内で動かしやすいのもGoodです。

## 長時間GPU系

### Stable Diffusion WebUI

https://github.com/AUTOMATIC1111/stable-diffusion-webui

言わずと知れた画像生成AI。普通はローカルサーバーとして使うと思いますが、GPU付きデスクトップで起動しておいて、どこからでもノートパソコンで接続できるのも便利です。

https://github.com/AbdBarho/stable-diffusion-webui-docker

有志によるDocker版もあります。

### JupyterLab

https://jupyter.org/

GPU付きデスクトップで立ち上げておけば、事実上のGoogle Colaboratory代替として使えます。Google Colaboratoryが少し前から使いっぱなしにできなくなったことを考えると、現実的にかなり良い代替案として使えると思います。

### 動画エンコーダー

具体的なサービス名がある訳ではないですが、適当なWebフロントにffmpegを足したようなコンテナを作れば簡単に作れます（フロントはなくても良い）。yt-dlpやMinIOと組み合わせると高性能なダウンローダーになります。

## 有料SaaSの代替アプリケーション

これはいくらでもあるので、ここまでに挙げたものと関連性の高いものだけ挙げておきます。

### n8n

https://n8n.io/

Zapier代替のOSSです。GmailやS3はもちろん、SupabaseやNextCloudとも連携可能で、おうちKubernetesスタックとの相性もバッチリです。Zapierでももちろん可能ですが、おうちKubernetesを始めるとすぐに無料枠を使い果たしてしまうので、早めにn8nを使うのがおすすめです。

### Authelia

https://www.authelia.com/

Auth0の代替OSSです。2段階認証等、だいたいのことができます。認証・認可は個人規模であれば自前実装よりもラクなことは多い印象です。

## 最後に

雑にまとめると重めなアプリの紹介になりました。実際、これらがおうちKuberenetesに向いているのは事実だと思います。

ただし、かなり軽量なアプリケーション（たとえばCMS等）であっても、起動する数が多くなってくるとやがてVPNよりもおうちKubernetesの方がコスパは良くなってきます。複数のプラットフォームを使用することで、アプリケーション数が多くなっても無料枠でやりくりすることは可能ですが、そうすると管理コストが膨れ上がってしまいます。

今は必要ないと思っても、どうせ使いたいアプリは増えていくので、諦めておうちKubernetesを始めてください。