おうちサーバーでサーバーレス

はじめに

この記事はUEC Advent Calendarの18日の記事です。
前の方はおかさんのiPadだけで大学生活を乗り切る。です。
初めまして、インフラいじりが趣味のごっちです。uec20です。
遅くなってしまいました。これが投稿されたのは22時半です。
みなさんはサーバーレスというものをご存知でしょうか?サーバーが無いかのようにバックエンドプログラムを書くものです。クライアントからのリクエストがあったときのみプログラムやコンテナが立ち上がり課金される仕組みが多く、お金やリソースがあんまり掛かりませんしOSの脆弱性などをプログラマは気にしなくても良いです。
ただクライアントからのリクエストが来て初めてプログラムを実行するので立ち上がりが遅いなどの欠点もあります。
まあモチベーションはサーバーレスon自宅鯖って言ってみたかっただけです。

実際どう嬉しいの

Kubernetes(k8s)というクラウド界隈ではよく知られたツールがあります。これは宣言的に構成を記述するとk8s上のコントローラーが現在の状態を目的の状態に合わせるように操作してくれる便利なツールです。
サーバーを構築する具体的な手順ではなく、サーバーがこうあってほしいというお気持ちで設定ファイルを書けるのでとても良いです。まあつらさもありますが。
k8sではコンテナを立てるときにアクセス数や負荷に応じてコンテナ数を1からn個にスケーリングするHorizontal Pod Autoscalerという機能があります。これをリクエストが来てないときに0個にしたくないですか?というのが今回使うknativeの機能の1つです。
k8sはあくまでインフラを抽象化して提供するツールで、そのインフラの上でこんな感じに自由に機能を拡張できます。

やっていき

つーる

knativeを使います。kubernetes nativeなFaaSツールです。
k8sはGoogleが開発していました。knativeはGoogleが開発しています。
GCPのCloud Runとかもknativeをラッパーしたものらしいです。
https://cloud.google.com/run

準備

みなさんk8sクラスタは持ってますよね?わたしのおうちにはg8s(gotti house k8s)があり、外部からの通信のほとんどを捌いています。この鯖もg8sに載っています。
そういえば今ブログ大改築をやっているのでこのブログもknativeに載せてみたいね。

インストール

公式ドキュメントを見ながらやっていきましょう。前提としてistioが入っていないk8sクラスタがあると良いです。
ドキュメント: https://knative.dev/docs/install/
いろいろインストール方法がありますが私はknative-operatorを選択しました。ネットワークレイヤにはistioを選択しました。
手順通りにカタカタやっていけばインストールができます。

やっていく

簡単です。これだけ。
https://knative.dev/docs/getting-started/first-service/
ためしにこのブログのちょっと前のスナップショットを公開してみました。運が良ければ最初の読み込みが遅いやつを体感できるかも。
https://blog.default.gotti.dev/

TODO

knativeはroute.namespace.ドメインというサブドメインを利用します。このサブドメインにCNAMEを設定したり証明書を当てたりしないといけません。なおまだcloudflareのコンパネをポチポチしてサブドメインを生やしています。。
どうやら証明書の発行は自動化できるっぽいのでやっていきたいですね。

まとめ