アプリ開発 - Kubernetes Engine にアプリケーションをデプロイする: Java
概要
Google Kubernetes Engine では、Google のインフラストラクチャを使用して、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを行えるマネージド環境が提供されます。この環境は複数のマシン(具体的には、Google Compute Engine インスタンス)で構成され、これらのマシンがグループ化されてクラスタを形成します。
クラスタの操作には、Kubernetes のメカニズムが使用されます。Kubernetes のコマンドとリソースを使用して、アプリケーションのデプロイと管理、管理タスクの実施とポリシーの設定、デプロイ済みワークロードの状態のモニタリングを行うことができます。
このラボでは、Cloud Build や Container Registry などの Google Cloud Platform リソースと、Deployment、Pod、Service などの Kubernetes リソースを使用して、クイズ アプリケーションを Kubernetes Engine にデプロイします。
目標
このラボでは、次のタスクの実行方法について学びます。
- Dockerfile を作成して、クイズ アプリケーションのフロントエンド コードとバックエンド コードをデプロイ用にパッケージ化する。
- Cloud Build を使用して Docker イメージを作成する。
- クイズ アプリケーションをホストする Kubernetes Engine クラスタをプロビジョニングする。
- Kubernetes の Deployment を使用して、複製 Pod を Kubernetes Engine にプロビジョニングする。
- Kubernetes の Service を使用して、クイズのフロントエンド用ロードバランサをプロビジョニングする。
設定と要件
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
-
Qwiklabs にシークレット ウィンドウでログインします。
-
ラボのアクセス時間(例:
1:15:00
)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。 -
準備ができたら、[ラボを開始] をクリックします。
-
ラボの認証情報(ユーザー名とパスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。
-
[Google Console を開く] をクリックします。
-
[別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。 -
利用規約に同意し、再設定用のリソースページをスキップします。
Google Cloud Shell の有効化
Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。
Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。
-
[続行] をクリックします。
環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。
gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
出力:
出力例:
- 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
出力:
出力例:
タスク 1. クイズ アプリケーションを準備する
このセクションでは、クイズ アプリケーションを含む Git リポジトリのクローンを作成し、環境変数を構成して、このアプリケーションを実行します。
Cloud Shell でソースコードのクローンを作成する
- Cloud Shell に次のコマンドを入力して、このラボのリポジトリのクローンを作成します。
- 作業ディレクトリへのソフトリンクを作成します。
クイズ アプリケーションを構成する
- 作業ファイルが入っているディレクトリに移動します。
- クイズのフロントエンド アプリケーションを構成します。
- Google App Engine アプリケーションを作成する。
- 環境変数
GCLOUD_PROJECT
とGCLOUD_BUCKET
をエクスポートする。 -
mvn clean install
を実行する。 - Google Cloud Datastore にエンティティを作成する。
- Google Cloud Pub/Sub トピックを作成する。
- Cloud Spanner のインスタンス、データベース、テーブルを作成する。
コードを確認する
次に、クイズ アプリケーションのコードをコードエディタで確認して更新します。Cloud Shell コードエディタを使用することも、Cloud Shell にインストールされている nano
や vim
などの shell エディタを使用することもできます。今回は Cloud Shell コードエディタを使用します。
- Cloud Shell コードエディタを起動します。Cloud Shell で [エディタを開く](鉛筆アイコン)をクリックして、コードエディタを起動します。
- コードとフォルダ構造を確認します。Cloud Shell コードエディタで、
training-data-analyst/courses/developingapps/v1.3/java/kubernetesengine/start
に移動します。
クイズ アプリケーションのフォルダ構造には、Kubernetes Engine にデプロイされるときの状態が新たに反映されています。
-
frontend
フォルダ: ウェブ アプリケーション用にパッケージ化された出力が含まれています。 -
backend
フォルダ: コンソール アプリケーション用にパッケージ化された出力が含まれています。 -
frontend
フォルダとbackend
フォルダのそれぞれに含まれるDockerfile
: Docker の構成ファイル。現時点では空です。 -
*.yaml
: Kubernetes Engine の構成ファイル。
-
Cloud Shell でターミナルに戻り、次のコマンドを使用してフロントエンド アプリケーションの出力
jar
をfrontend
フォルダにコピーします。cp ./target/quiz-frontend-0.0.1.jar ./frontend/ -
クイズのバックエンド アプリケーションを構成します。
mvn package -f pom-backend.xml -
バックエンド アプリケーションの出力 jar を
backend
フォルダにコピーします。cp ./target/quiz-backend-0.0.1.jar ./backend/
タスク 2. Kubernetes Engine クラスタを作成する
このセクションでは、クイズ アプリケーションをホストする Google Kubernetes Engine クラスタを作成します。
-
コンソールで、ナビゲーション メニュー > [Kubernetes Engine] > [クラスタ] をクリックします。
-
次に [作成] をクリックします。
-
GKE Standard の [構成] を選択します。.
-
クラスタを構成します。次の表に含まれるプロパティには表の値を使用し、表にないプロパティはデフォルト値のままにします。
[クラスタの基本] で次の値を設定します。
プロパティ 値 名前 quiz-cluster
ゾーン us-central1-b
-
default-pool を展開します。
-
[セキュリティ] で [すべての Cloud API に完全アクセス権を許可] を選択します。
-
[作成] をクリックします。クラスタのプロビジョニングには数分かかります。
クラスタに接続する
-
クラスタの準備ができたら、その他アイコンをクリックして [接続] を選択します。
-
[クラスタに接続する] で、最初のコマンドをクリップボードにコピーします。
-
[OK] をクリックして [クラスタに接続する] ウィンドウを閉じます。
このコマンドの形式は、gcloud container clusters get-credentials quiz-cluster --zone us-central1-b --project <プロジェクト ID>
です。
-
Cloud Shell にコマンドを貼り付けて、Enter キーを押します。
または [Cloud Shell で実行] をクリックして Enter キーを押します。
-
クラスタ内の Pod を一覧表示します。
kubectl get pods
このコマンドのレスポンスで、クラスタ内に Pod がないことを確認します。
これにより、kubectl
コマンドライン ツールでクラスタへの操作を行えるようセキュリティが構成済みであることを確認できました。
タスク 3. Cloud Build を使用して Docker イメージをビルドする
このセクションでは、アプリケーションのフロントエンド用とバックエンド用の Dockerfile を作成します。次に、Cloud Build を使用してイメージをビルドし、Container Registry に格納します。
フロントエンド用の Dockerfile を作成する
-
Cloud Shell コードエディタ([エディタを開く] をクリック)で、
frontend/Dockerfile
を開きます。 -
次の内容をコピーして
frontend/Dockerfile
に貼り付けます。
- ファイルを保存します。
このスクリプトの処理内容:
このスクリプトは、一連の Dockerfile コマンドです。
-
最初のコマンド(
FROM gcr.io/google_appengine/jetty9
)は、Google App Engine の Jetty 9 イメージ(gcr.io/google_appengine/jetty9
)を開始点として使用し、カスタム Docker イメージの作成を初期化します。 -
2 番目のコマンド(
VOLUME /tmp
)は、/tmp
というパスを使用して、コンテナのファイル システムにボリュームを作成します。 -
3 番目のコマンド(
ADD ./quiz-frontend-0.0.1.jar /app.jar
)は、ビルドプロセスの一部として Maven のパッケージ化プロセスによって生成されたフロントエンド用の Jar ファイル(uiz-frontend-0.0.1.jar
)を追加します。 -
4 番目の最後のコマンド(
CMD java -jar /app.jar
)は、コンテナの実行時に実行されます。
バックエンド用の Dockerfile を作成する
バックエンド用の Dockerfile の作成方法は、バックエンド用の jar
ファイルを追加することを除いて、フロントエンド用 Dockerfile の作成方法と同じです。
-
Cloud Shell コードエディタで、
backend/Dockerfile
を開きます。 -
次の内容をコピーして
backend/Dockerfile
に貼り付けます。
- ファイルを保存します。
タスク 4. Cloud Build を使用して Docker イメージをビルドする
-
Cloud Shell([ターミナルを開く] をクリック)で、次のコマンドを入力してフロントエンドの Docker イメージをビルドします。
gcloud builds submit -t gcr.io/$DEVSHELL_PROJECT_ID/quiz-frontend ./frontend/ ファイルは Cloud Storage にステージングされ、Docker イメージがビルドされて Container Registry に保存されます。これには数秒かかります。
-
バックエンドの Docker イメージをビルドします。
gcloud builds submit -t gcr.io/$DEVSHELL_PROJECT_ID/quiz-backend ./backend/ -
コンソールで、ナビゲーション メニュー > [Container Registry] をクリックします。[quiz-frontend] と [quiz-backend] の 2 つのフォルダが表示されます。
-
quiz-frontend をクリックします。イメージ名(ハッシュ)、タグ(latest)などの詳細が表示されます。
タスク 5. Kubernetes の Deployment と Service の各リソースを作成する
このセクションでは、Kubernetes の Deployment と Service のリソースの仕様を含むテンプレート ファイル(yaml
)を変更して、Kubernetes Engine クラスタにこれらのリソースを作成します。
Kubernetes の Deployment ファイルを作成する
-
コードエディタで、
frontend-deployment.yaml
ファイルを開きます。ファイルのスケルトンが作成されています。プレースホルダをプロジェクトに固有の値に置き換えてください。 -
以下の値を使用して、
frontend-deployment.yaml
ファイル内のプレースホルダを置き換えます。プレースホルダ名 値 [GCLOUD_PROJECT] GCP プロジェクト ID(プロジェクト ID を表示するには、Cloud Shell で「 echo $GCLOUD_PROJECT
」と入力)[GCLOUD_BUCKET] プロジェクトのメディア バケットの Cloud Storage バケット ID。バケット ID は [GCP_Project_ID]-media
です。[FRONTEND_IMAGE_IDENTIFIER]
フロントエンド イメージの識別子( gcr.io/[GCP_Project_ID]/quiz-frontend
の形式)[ ]
で囲まれている値のみ置き換えてください。変更後の yaml ファイルは以下のようになります。
apiVersion: apps/v1beta1 kind: Deployment metadata: name: quiz-frontend labels: app: quiz-app spec: replicas: 3 template: metadata: labels: app: quiz-app tier: frontend spec: containers: - name: quiz-frontend image: gcr.io/qwiklabs-gcp-04-3ad1f39f2114/quiz-frontend imagePullPolicy: Always ports: - name: http-server containerPort: 8080 env: - name: GCLOUD_PROJECT value: qwiklabs-gcp-04-3ad1f39f2114 - name: GCLOUD_BUCKET value: qwiklabs-gcp-04-3ad1f39f2114-media quiz-frontend の Deployment は、フロントエンド Docker イメージの 3 つのレプリカを Kubernetes Pod にプロビジョニングし、Kubernetes Engine クラスタの 3 つのノードに分散します。
-
ファイルを保存します。
-
backend-deployment.yaml
ファイルを開き、以下の値を使用してbackend-deployment.yaml
ファイル内のプレースホルダを置き換えます。プレースホルダ名 値 [GCLOUD_PROJECT] GCP プロジェクト ID(または、 echo $GCLOUD_PROJECT
を使用)[GCLOUD_BUCKET] プロジェクトのメディア バケットの Cloud Storage バケット ID。 frontend-deployment.yaml
で使用されているのと同じバケットです(バケット ID は[GCP_Project_ID]-media
です)。[BACKEND_IMAGE_IDENTIFIER]
バックエンド イメージの識別子( gcr.io/[GCP_Project_ID]/quiz-backend
の形式)quiz-backend の Deployment は、バックエンド Docker イメージの 1 つのレプリカを Kubernetes Pod にプロビジョニングし、Kubernetes Engine クラスタの 3 つのノードのいずれかに配置します。
-
ファイルを保存します。
-
frontend-service.yaml
ファイルの内容を確認します。注: Service は、ロードバランサを使用してフロントエンド Deployment を公開します。ロードバランサは、クライアントからのリクエストをフロントエンド Pod の 3 つのレプリカすべてに送信します。
Deployment ファイルと Service ファイルを実行する
-
Cloud Shell で、クイズのフロントエンド Deployment をプロビジョニングします。
kubectl create -f ./frontend-deployment.yaml -
クイズのバックエンド Deployment をプロビジョニングします。
kubectl create -f ./backend-deployment.yaml -
クイズのフロントエンド Service をプロビジョニングします。
kubectl create -f ./frontend-service.yaml
各コマンドで、Kubernetes Engine にリソースがプロビジョニングされます。プロセスの完了には数分かかります。
タスク 6. クイズ アプリケーションをテストする
このセクションでは、デプロイされた Pod と Service を確認し、クイズ アプリケーションに移動します。
デプロイされたリソースを確認する
-
コンソールで、ナビゲーション メニュー > [Kubernetes Engine] > [ワークロード] をクリックします。
quiz-frontend
とquiz-backend
の 2 つのポッドが表示されます。Pod のステータスには OK または作成中と表示されます。
-
quiz-frontend をクリックして
quiz-frontend
の概要を表示します。 -
下にスクロールして、[マネージド Pod] を表示します。
quiz-frontend ロードバランサのステータスには、作成中または OK と表示されます。Service が OK になったら続行します。Service の準備が整うと、IP アドレスのエンドポイントが表示されます。
-
[サービスの公開] の [エンドポイント] に示されている IP アドレスを選択し、ブラウザの新しいタブで開きます。
-
テストを受けて、アプリケーションが想定どおりに動作することを確認します。
ラボを終了する
ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。