🏡まったのブログ

Qwiklabs: Getting Started: Create and Manage Cloud Resources の修了

Qwiklabs(Google Cloud Training: GCPを使うための有料のハンズオン)でGCPの基礎クエスト(Getting Started: Create and Manage Cloud Resources)を修了した(バッジもらえた)!正直中身は理解できていないがGCPでのリソースの構築をする際の知識をメモしておく。

Cloud Chell と VMインスタンスのSSH対話型シェル

Cloud Shell というのは、GCP上で使える何でもツールが揃っているMacのターミナルみたいなもの。git や gcloud CLI などのツール、Pythonなどの言語がおおかたインストールされているので、このシェルを使ってGCPをコマンドで操作できる(いわゆるコマンドプロンプト)。

一方でVMインスタンスというのは Compute Engine の中にあるとおり仮想マシンのインスタンス。何かのアプリをデプロイしたり、何かしらのWebサーバーとして処理を行うものを作りたいときはこれを作る必要がある。

これのSSHによる対話型シェルの起動ができるが、これは仮想マシン内部をCLIで操作するときに使うようだ。一方で Cloud Shell はGCPプロジェクト全体を操作するためのものらしい。

Cloud Shell でgcloud compute ssh gcelab2 --zone us-central1-cと打てば、こっちからもVMインスタンスの中に入って操作ができるよう。

コンテナとクラスタ

コンテナとは、そのプログラムが動く環境ごとパッケージングされたものを言うらしい(Dockerはこれを作るサービスっぽい)。

一方でクラスタは、いくつものマシンをつなげて1つのマシン(サーバー)として使うやつのこと。

Kubernetes Engine

Kubernetes というのは、このコンテナを使ってデプロイなどをいい感じに行える環境のことっぽい。

Google Kubernetes Engine は、Google のインフラストラクチャを使用して、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを行うマネージド環境を提供します。

クラスタは中心となるクラスタマスターマシンと、その他のノードで構成されている。

クラスタは、少なくとも 1 つのクラスタ マスターマシンと、ノードと呼ばれる複数のワーカーマシンで構成されます。ノードは Compute Engine 仮想マシン(VM)インスタンスであり、自身をクラスタの一部にするために必要な Kubernetes プロセスを実行します。

実際、以下のコマンドを打てば--image=gcr.io/google-samples/hello-app:1.0をデプロイできる。

gcloud container clusters create [CLUSTER-NAME]

gcloud container clusters get-credentials [CLUSTER-NAME]

kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0

kubectl expose deployment hello-server --type=LoadBalancer --port 8080

kubectl get service

// http://[EXTERNAL-IP]:8080 にアクセスすればデプロイできていることが分かる

ロードバランサーとリバースプロキシ

負荷を分散するのがロードバランサー、攻撃などの対策のためにクライアントとWebサーバーの間に入る(代理としてファイルを送る)のがリバースプロキシらしい。

リバースプロキシに複数のWebサーバーを繋げば負荷分散させることも可能。一般的にはロードバランサーと各Webサーバーの間にリバースプロキシを置くみたい(自信ない)。

負荷分散にはいくつもの方法がある

Google Cloud Platform で負荷を分散するには、いくつかの方法があります。このラボでは、次のロードバランサの設定について詳しく説明します。

複数のウェブサーバー インスタンスの作成

Nginx ウェブサーバー クラスタを作成するため、次のものを作成します

  • 起動時に Nginx サーバーを構成するすべての仮想マシン インスタンスで使用される、起動スクリプト
  • 起動スクリプトを使用するインスタンス テンプレート
  • ターゲット プール
  • インスタンス テンプレートを使用するマネージド インスタンス グループ

ネットワーク ロードバランサの作成

ネットワークロードバランサはこれだけで作成できる。

gcloud compute forwarding-rules create nginx-lb \
         --region us-central1 \
         --ports=80 \
         --target-pool nginx-pool

HTTPロードバランサと違って、TCP/UCPの通信での負荷分散をするそうだけど、使い所はイメージできなかった。

ネットワーク ロードバランサを利用すると、システムの負荷を受信 IP プロトコル データ(アドレス、ポート、プロトコル タイプなど)に基づいて分散することができます。HTTP(S) ロード バランシングにはないオプションもいくつか利用できます。たとえば、SMTP トラフィックなど、TCP/UDP ベースの付加的なプロトコルの負荷を分散することができます。

HTTP(S) ロードバランサの作成

これは手順を追っても何をやっているか分からなかった。ただ色んなものを作成する必要がある。

  • ヘルスチェックの作成
  • バックエンド サービスの作成とマネージド インスタンス グループのアタッチ
  • URL マップと自身の URL マップにリクエストをルーティングするターゲット HTTP プロキシの作成
  • 転送ルールの作成

Qwiklabsのハンズオンラボには上記工程のコードがただ羅列してあって簡易な説明しかなかったので、具体的にそれぞれ作成したものの役割や、それらの関係性などは別でじっくり学ぶ必要がある。