みなさん、こんにちは。エンジニアの蔵谷です。

今回はGKEについて書きたいと思います。

なぜGKEについて勉強始めたかというと、現在BeaconBankをAppEngineで運営しているのですが・・・、ユーザーが大量に増えインフラ代が5倍に跳ね上がってしまいアーキテクチャを見直すことになりました。最近、Kubernetesが流行っているし、個人的にも使ってみたかったし、コストも安くなりそうだしという理由でGKEに移行することにしました。やりたいことを即実行できるのがベンチャーのいいところですねw

そこで、勉強も兼ねてRedmineサーバーをGKEにリプレイスするということをしました。

Kubernetesとは

コンテナ化したアプリケーション(RedmineやMySQL等)のデプロイ、スケール、管理を自動化するためのプラットフォームです。Google社内で利用されていた「Borg」というクラスタ管理システムが元になっており、現在はKubernetesとしてオープンソース化されています。

Kubernetesの登場人物について

コンテナ(Container)

アプリケーションと実行環境をパッケージングしたもの。例えば、WordPressコンテナには、 WordPress本体とPHP実行環境が含まれています。

ノード(Node)

仮想サーバーまたは、物理サーバーのこと。それぞれのノードにはIPが設定されています。

クラスタ(Cluster)

ノードが集まったもの。ノードがスライムだとしたら、クラスタはキングスライムです。

ポッド(Pod)

最小のKubernetesオブジェクトのこと。コンテナが集まったものをポッドと言います。

図で表すとこんな感じ。

Kubernetsのメリット

・オートスケール

Clusterが常にリソース状況を監視しており、リソースが足りなければノードを追加したりしてくれるので、サーバーダウンで利用できなくなるということがほぼ無い。

・耐障害性

何らかの原因でNodeがダウンした場合、Clusterが検知し自動でNodeを立ち上げてくれます。

・無停止でのバージョンアップ

新機能をリリースした場合、ノード単位でバージョンアップができるためサーバー停止が必要ありません。障害時のダウングレードも同様です。

次回からRedmineサーバー構築に入っていきます。