2017/12/5追記
cloudplatform-jp.googleblog.com
クラスタ料金が無料になったため、5ノード以下は考えなくてよくなりました。
ただノード数を抑えることで、kubeシステム系の数は減らせるので、そちらはまだ有効そう。
2017/12/5追記ここまで
oceanusはGKEで本番運用を行っているけど、Kubernetesのバージョンを上げるたびに、CPUの消費が上がって、ノードが必要になっている気がする。
アプリケーションは大して変更していないし、アクセスも急増しているわけではない。
そこで、なるべくコストを抑える方法を考えた。
GKEの料金は2017/11/18現在下記のようになっている
Google Kubernetes Engine の料金と割り当て | Kubernetes Engine ドキュメント | Google Cloud Platform
なるべく5ノード以下にする
デフォルトでは1時間単位になっているけど、今のサービスはそんなピークのある使用ではないので、1か月で考えた。
東京リージョンでは、無料枠である5ノードを超えると、それまで無料だったのに一気に146ドル増えてしまう。
※個人的な解釈だけど、GKEのノード ≒ GCEのVMインスタンスと考えて今のところ問題ない。
n1-standard-1を東京で1か月借りると約31ドルとなるので、4台以上追加できることとなる。
5ノード以下に抑えれば、n1-standard-1×4相当のリソースを増やせると考えると、ここは可能な限りリソースに振りたいところ。
これはCloud Console上でも下記のようにメッセージで注意してくれる
4ノードの時
6ノードにしたとき
1インスタンスのリソースを増せば、ノード数は減らせる
ここで注目したいのは、ノード数(≒VMインスタンス数)であって、vCPUやメモリではないところ。
つまりvCPUが8個必要な場合、vCPUが1つ付いているn1-standard-1(もしくは同等のカスタムインスタンス)を8つとしてしまうと、3個オーバーしてしまうが、vCPUが4付いたn1-standard-1を2つにすればvCPUは8あるけど、ノード数は2になるので、無料枠で収まる計算。
もちろんn1-standard-8を一つでもいい。
VMインスタンスを分ける必要がなく、単純にCPU数が必要であれば、ノード数を増やすスケールアウトではなく、スケールアップを行いなるべくノード数を抑える方がいいと今のところ考えている。
見積もり
下記ツールで上記の条件で計算してみた
上記の通り、同じCPU数、同じメモリでありインスタンス料金は同じ$249.37/月だけど、n1-standard-1を8つの場合 Container Engine Cost: $146.00が余計にかかってしまう。
オートスケールをうまく使う
まだノードの自動スケールはベータ版だけど、これがちゃんと使えるのであれば、普段はノード数を5以下に収まるようになるべく性能のいいインスタンスを使い、急激な負荷のときだけノード数が増えるようにしておけば、GKEは1時間$0.20なので、数時間であれば大した負担にはならないのでいいと思う。
最後に
1年以上GKEで本番運用をし、新規サービスもすべてGKEで出しているものの、まだ大きな負荷で困ったことがないので、もっとユーザーがたくさん来てくれるサービスを作りたいと思った(小並感)