Knativeのオートスケール機能をminikubeで試したメモ

Knativeが発表されたので、GKEや手元のminikubeで遊んでいた。オートスケール機能について試したよ。autoscale-go/README.mdをminikubeでやった、という記録です。

GKEでもいいけど、今回はminikubeを使う。Mac上にhyperkitを使って構築するので、kubernetes/minikubeを参考にしてminikubeをhyperkitで使えるようにしておく必要があります。

Knative servingのインストール

基本的にドキュメントに従って進めればよいので割愛。

autoscale-goを試す

さて、autoscale-goを試してみる。サンプルアプリをビルドしてコンテナイメージをレジストリに置くのだけど、今回はhub.docker.comに置くことにした。minikubeの場合、minikube上でビルドしてしまえばレジストリに置く必要もないかも。

プッシュ

autoscale-go用のマニフェストを書き換えて、レジストリにプッシュしたイメージを使用する必要がある。公式ドキュメントを真似して、perlで書き換え。

diffを確認…

マニフェストができたのでapplyしましょう。

これで、Knative servingによってPodが作られる。最初は1台しかない。

minikubeの場合、ここから先少しやり方が変わる。スケールアウトのために大量にリクエストを投げるのだが、そこでアクセス用のアドレス・ポートを指定しておく。test.goのオプションで、ipとportを指定します。それぞれの値はMinikube用のインストールドキュメントを見ると確認方法が記載されている。fishの場合だと以下のようにする。

さて、アクセス先の情報も分かったので、test.goでリクエストを投げまくる。

すると…1台だったPodが増えていることが確認できる。minikubeだからか、なかなかRunningにならないのだけどGKEなどで試すと全てRunningになると思う。

test.goの実行を止めると、Podが減っていくことも確認できる。

仕組み

スケールアウト・スケールインすることはわかったが、どういうロジックだろう?と思いドキュメントを眺めると、書かれていた。Pod毎の、完了していないリクエスト平均数(in-flight requestってこういう意味であってるかな)をベースとしているようだ。デフォルトは1.0なので、Podが処理しているリクエストが常に1.0となるようにPodの数を増減している、ということかな?また、より詳細な情報はDEVELOPMENT.mdにあれこれかかれているので読むと良さそう。

感想

スケールアウト機能がServingをインストールするだけでパッと使えたので手軽でよいと思いました(HPAもHeapsterをいれればすぐ使えるか)。おもしろそうなので触ってくぞー。