つかびーの技術日記

情報系修士卒のWeb系技術日記です。現在のフォーカス分野はアドテクです。

Google Container Engine (GKE, Kubernetes) を使ってサービスを外部公開する

   

こんにちは、@s_tsukaです。

今回はGKEを触ってみました。Kubernetesは以前にちょこっと触ってPod立てたくらいで知識が止まってます。

実際にGKE, Kubernetesを使うとなるとこれを使って何らかの仕事をさせたいわけで、特にWebアプリ、Webサービスの場合外部に公開する必要が出てきます。今回はその外部公開まわりを中心に試していきます。

今回はnginxを立てて、それを独自ドメインでアクセスできるようにするのが目標です。

こちらのサイトを参考にさせていただきました。正直やってることはほぼ同じなので、こちらのサイトを見たほうがいいかもしれません。

GKEでコンテナ作成/管理しよう!

Kubernetesクラスタを立てる

この後使うkubectlコマンドはクラスタの操作コマンドなのでクラスタ自体はgcloudコマンドで作成。GUIからやってもOKです。

nginxコンテナ(Pod)を動かす

nginxを動かすための設定ファイルを作成します。

最近ではkind:Deploymentが高機能で良いようですね。

以下のコマンドを実行します。

これでPodは動いたはずなので確認してみます。

ちゃんと動いているようです。

クラスタのWebUIも一応見てみます。

GKEのWebコンソール上でクラスタに接続と出るので、この指示通りに従います。自分の場合はproject名がtsukaby1となっているので、このあたりは各自自分の設定でやりましょう。

あとURLもブラウザに直入力で行くとUnauthorizedになるので、上記のリンクから辿ったほうが良いです。

CUIでわかってたことですが、ちゃんと3つポッドが起動していますね。DC/OSのような何やら期待感が高まるGUIで良いですね。

IPを作る

LBのServiceを作ってExternalIPを割り当ててもらいます。

はじめは<pending>ですが少し経つとIPが振られました。

GCPのコンソール上でも確認できます。IPが作られてますね。

curlでアクセスできるか確認してみましょう。

きました。成功です!

独自ドメイン(Aレコード登録)

正直Global IPさえ出せれば後はDNSの話な気もしますが、一応独自ドメインも設定しておきます。

自分が持っているtsukaby.comはAWSで買っていて、そちらのRoute53で一通り登録しています。なのでそこでAレコードを追加します。

追加後にcurlしたところちゃんと接続できました。

 

これで一通りアプリを公開できるところまで行けましたが、実際に運用すると遭遇しそうな他の操作についても確認していきます。

アプリ(コンテナ)のバージョンアップ

上記のcurlでServer: nginx/1.11.8とありますが、実際には作ったアプリなどはバージョンアップがあると思います。nginxで言うと2017/03/13現在、1.11.9のimageも存在します。そこでバージョンアップをしてみます。

Kubernetesのkind: Deploymentについては以下が詳しいです。ありがたや

Kubernetes: Deployment の仕組み

ファイルをもう1つ作って1.11.9とします。

以下のコマンドを実行します。

AGEが2mで若くなりました。早速curlで確認してみます。

1.11.9になりました。バージョンアップ成功です。

他のアプリも動かす

実際の運用でどうなるかはわかりませんが、1つのクラスタで他の種類のdocker containerを動かしたいシーンは少なからずあると思います。それを想定して、nginxに加えてghost(軽量blog)も動かしてみます。

GhostはnginxのExpressというフレームワークを使っているのでX-Powered-Byで正しいことが確認できました。

nginxもghostもどちらもLBを作りましたが別々のものですし、IPも別で。target portもghostの方は2368を見るようにしているので(Ghost imageは2368で開けてる)正しく到達できます。

Scale

Podを増やしてScaleするのと、クラスタのサイズ自体をScaleさせるので2種類あります。これは冒頭にも紹介したこちらの記事で十分実験されているので今回は省略します。

GKEでコンテナ作成/管理しよう!

まとめ

KubernetesクラスタをGKE上に作成しました。

nginxをKubernetes上で立ち上げました。

nginxをLB Service配下に設定し、LBのGlobal IPを独自ドメインと紐付けてnginxをドメインで参照できるようにしました。

他のPodも立ち上げて1つのクラスタで複数のアプリを共存させました。

Kubernetes、GKE、デプロイも設定ファイルを適用するだけで簡単ですね。今後も他の機能をチェックしていこうと思います。

 - クラウドサービス , , , ,