遅ればせながら11月3日のPHP Conferenceで発表してきたことについて補足交え、ブログをかきます

発表資料は上記の画像のリンクからたどってみてください。 ちなみに動画で見たい方はコチラです
(動画がアーカイブされることを知らず、発表前、プラプラしているのを取られちゃってますが・・・)

 

kubernetesをつかいはじめ、もろもろつまづいたところをまとめ、今後のみなさんの導入の助けになれば、といった内容になっています。

スライドにもありますが、kubernetesの特徴として
・デプロイの自動化
・アプリケーションをスケーリング
・ハードウェアの使用を最適化
があげられます


用語が覚えるまでピンとこなかったので、用語の解説もスライドにのせています

kubernetesのPodの管理は非常に優秀で、基本的にDeploymentに状態を定義すれば、あとは気にすることはありません
Rolling Updateもすばらしい機能です

 

ただし、自分が携わっているゲームの運用において、Rolling Updateは運用上都合がわるいです。


ゲームでは、ユーザへ不公平感がでないようにすることが重要で、サーバの更新(プログラムの挙動の変化)がすべてのユーザ同時に起こることがのぞまれます。

たとえば、バトルに関するゲームで、スキルの発動の不具合を直すデプロイをしたとき、
ユーザが接続したサーバによって、スキルの発動結果が異なる結果になったら、公平感がなくなってしまいます。
そのため、基本的にはサーバの更新がサーバによらず、同時に反映されてほしいものです。

 

そこで、Rolling Updateではなく、ブルーグリーンデプロイをkubernetesで行うにはどうずればよいかを検証してみました。

発表スライドにありますが、以下、2種類の方法で検証、比較しています

(A) Ingress(LB)によるブルーグリーンの切り替え
(B)Serviceの振り分け先を変更することによるブルーグリーンの切り替え
です

 

発表スライドで試したときには、Node数3、Pod数3で試したのですが、今回、Node数、Pod数が多いときの挙動で、デプロイの動作に違いが出るかも同時に比較してみました。

以下、結果です(GKEで実施しています)


(1)Node数2、Pod数20の環境でIngressでBlue系をGreen系に切り替えたとき


縦軸はreq/s、横軸は、デプロイしてからの経過時間です。約80req/sのアクセスをしたときに、Blue系のレスポンスがかえってきたときは青のグラフ、Green系のレスポンスがかえってきたときは赤のグラフになっています(以下グラフの見方は同様です)

 


(2)Node数2、Pod数20の環境でServiceを更新してBlue系をGreen系に切り替えたとき

 

(1)と(2)を比べてわかることは、(2)の方が、Blue系のレスポンスが0になるまで時間がかかっているということです。
(1)は(2)にくらべ、Blue系のレスポンスが0になるまでの時間が短いです。
ただし、デプロイ後に直にGreen系のレスポンスがかえってくるわけではなく、Green系のレスポンスがかえってくるようになるまで1分くらいかかっていることがわかります。

 

次にNode数、Pod数を増やしてみた結果をみてみます。

 

(3)Node数20、Pod数200の環境でIngressでBlue系をGreen系に切り替えたとき

 

(4)Node数20、Pod数200の環境でServiceを更新してBlue系をGreen系に切り替えたとき

 

Node数、Pod数を増やしてみたところ、傾向は同じで、より顕著に違いがわかるようになりました。

LBで切り替える場合は、Node数、Pod数によらず、Green系のレスポンスが0になるまでの時間は(1)とくらべ、あまり変わりません
一方、Serviceで切り替える場合は、Node数、Pod数が増えると、Green系のレスポンスが、なかなか0にならないのがはっきりとグラフに現れています

 

上記検証結果をうけて、現時点(2016/11/9)のkubernetesのGKE上の動作では、ブルーグリーンデプロイを実施するのであれば、LBによる切り替えのほうが望ましい、と自分は結論づけました。

 

みなさんがkubernetesを使うときの参考になれば幸いです