arrow_back

アプリ開発 - Kubernetes Engine にアプリケーションをデプロイする: Java

ログイン 参加
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

アプリ開発 - Kubernetes Engine にアプリケーションをデプロイする: Java

ラボ 2時間 universal_currency_alt クレジット: 5 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

概要

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 プロジェクトとリソースセットを一定時間無料で利用できます。

  1. Qwiklabs にシークレット ウィンドウでログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
    一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。

  5. [Google Console を開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
    他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

Google Cloud Shell の有効化

Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。

Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

    ハイライト表示された Cloud Shell アイコン

  2. [続行] をクリックします。

環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

Cloud Shell ターミナルでハイライト表示されたプロジェクト ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  • 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list

出力:

Credentialed accounts: - @.com (active)

出力例:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project =

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: gcloud ドキュメントの全文については、 gcloud CLI の概要ガイド をご覧ください。

タスク 1. クイズ アプリケーションを準備する

このセクションでは、クイズ アプリケーションを含む Git リポジトリのクローンを作成し、環境変数を構成して、このアプリケーションを実行します。

Cloud Shell でソースコードのクローンを作成する

  1. Cloud Shell に次のコマンドを入力して、このラボのリポジトリのクローンを作成します。
git clone --depth=1 https://github.com/GoogleCloudPlatform/training-data-analyst
  1. 作業ディレクトリへのソフトリンクを作成します。
ln -s ~/training-data-analyst/courses/developingapps/v1.3/java/kubernetesengine ~/kubernetesengine

クイズ アプリケーションを構成する

  1. 作業ファイルが入っているディレクトリに移動します。
cd ~/kubernetesengine/start
  1. クイズのフロントエンド アプリケーションを構成します。
. prepare_environment.sh 注: このスクリプト ファイルを実行すると、以下の処理が行われます。

  • Google App Engine アプリケーションを作成する。
  • 環境変数 GCLOUD_PROJECTGCLOUD_BUCKET をエクスポートする。
  • mvn clean install を実行する。
  • Google Cloud Datastore にエンティティを作成する。
  • Google Cloud Pub/Sub トピックを作成する。
  • Cloud Spanner のインスタンス、データベース、テーブルを作成する。

コードを確認する

次に、クイズ アプリケーションのコードをコードエディタで確認して更新します。Cloud Shell コードエディタを使用することも、Cloud Shell にインストールされている nanovim などの shell エディタを使用することもできます。今回は Cloud Shell コードエディタを使用します。

  1. Cloud Shell コードエディタを起動します。Cloud Shell で [エディタを開く](鉛筆アイコン)をクリックして、コードエディタを起動します。

Cloud Shell エディタ アイコン

注: ターミナルがコードエディタに置き換わります。[ターミナルを開く] をクリックすれば、ターミナルに戻ることができます。
  1. コードとフォルダ構造を確認します。Cloud Shell コードエディタで、training-data-analyst/courses/developingapps/v1.3/java/kubernetesengine/start に移動します。
注: kubernetesengine フォルダ内には end というフォルダもあります。この end フォルダには start フォルダ内にあるものと同じファイルが含まれていますが、end フォルダ内の各ファイルには、このラボを実行するための完全なコードが記述されています。

クイズ アプリケーションのフォルダ構造には、Kubernetes Engine にデプロイされるときの状態が新たに反映されています。

  • frontend フォルダ: ウェブ アプリケーション用にパッケージ化された出力が含まれています。
  • backend フォルダ: コンソール アプリケーション用にパッケージ化された出力が含まれています。
  • frontend フォルダと backend フォルダのそれぞれに含まれる Dockerfile: Docker の構成ファイル。現時点では空です。
  • *.yaml: Kubernetes Engine の構成ファイル。
  1. Cloud Shell でターミナルに戻り、次のコマンドを使用してフロントエンド アプリケーションの出力 jarfrontend フォルダにコピーします。

    cp ./target/quiz-frontend-0.0.1.jar ./frontend/
  2. クイズのバックエンド アプリケーションを構成します。

    mvn package -f pom-backend.xml
  3. バックエンド アプリケーションの出力 jar を backend フォルダにコピーします。

    cp ./target/quiz-backend-0.0.1.jar ./backend/

タスク 2. Kubernetes Engine クラスタを作成する

このセクションでは、クイズ アプリケーションをホストする Google Kubernetes Engine クラスタを作成します。

  1. コンソールで、ナビゲーション メニュー > [Kubernetes Engine] > [クラスタ] をクリックします。

  2. 次に [作成] をクリックします。

  3. GKE Standard の [構成] を選択します。.

  4. クラスタを構成します。次の表に含まれるプロパティには表の値を使用し、表にないプロパティはデフォルト値のままにします。

    [クラスタの基本] で次の値を設定します。

    プロパティ
    名前 quiz-cluster
    ゾーン us-central1-b
  5. default-pool を展開します。

  6. [セキュリティ] で [すべての Cloud API に完全アクセス権を許可] を選択します。

  7. [作成] をクリックします。クラスタのプロビジョニングには数分かかります。

クラスタに接続する

  1. クラスタの準備ができたら、その他アイコンをクリックして [接続] を選択します。

    その他アイコンのプルダウン メニューが展開され [接続] オプションがハイライト表示されている

  2. [クラスタに接続する] で、最初のコマンドをクリップボードにコピーします。

  3. [OK] をクリックして [クラスタに接続する] ウィンドウを閉じます。

このコマンドの形式は、gcloud container clusters get-credentials quiz-cluster --zone us-central1-b --project <プロジェクト ID> です。

  1. Cloud Shell にコマンドを貼り付けて、Enter キーを押します。

    または [Cloud Shell で実行] をクリックして Enter キーを押します。

  2. クラスタ内の Pod を一覧表示します。

    kubectl get pods

このコマンドのレスポンスで、クラスタ内に Pod がないことを確認します。

これにより、kubectl コマンドライン ツールでクラスタへの操作を行えるようセキュリティが構成済みであることを確認できました。

タスク 3. Cloud Build を使用して Docker イメージをビルドする

このセクションでは、アプリケーションのフロントエンド用とバックエンド用の Dockerfile を作成します。次に、Cloud Build を使用してイメージをビルドし、Container Registry に格納します。

フロントエンド用の Dockerfile を作成する

  1. Cloud Shell コードエディタ([エディタを開く] をクリック)で、frontend/Dockerfile を開きます。

  2. 次の内容をコピーして frontend/Dockerfile に貼り付けます。

FROM gcr.io/google_appengine/jetty9 VOLUME /tmp ADD ./quiz-frontend-0.0.1.jar /app.jar CMD java -jar /app.jar
  1. ファイルを保存します。

このスクリプトの処理内容:

このスクリプトは、一連の 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 の作成方法と同じです。

  1. Cloud Shell コードエディタで、backend/Dockerfile を開きます。

  2. 次の内容をコピーして backend/Dockerfile に貼り付けます。

FROM gcr.io/google_appengine/jetty9 VOLUME /tmp ADD ./quiz-backend-0.0.1.jar /app.jar CMD java -jar /app.jar
  1. ファイルを保存します。

タスク 4. Cloud Build を使用して Docker イメージをビルドする

  1. Cloud Shell([ターミナルを開く] をクリック)で、次のコマンドを入力してフロントエンドの Docker イメージをビルドします。

    gcloud builds submit -t gcr.io/$DEVSHELL_PROJECT_ID/quiz-frontend ./frontend/

    ファイルは Cloud Storage にステージングされ、Docker イメージがビルドされて Container Registry に保存されます。これには数秒かかります。

  2. バックエンドの Docker イメージをビルドします。

    gcloud builds submit -t gcr.io/$DEVSHELL_PROJECT_ID/quiz-backend ./backend/
  3. コンソールで、ナビゲーション メニュー > [Container Registry] をクリックします。[quiz-frontend] と [quiz-backend] の 2 つのフォルダが表示されます。

  4. quiz-frontend をクリックします。イメージ名(ハッシュ)、タグ(latest)などの詳細が表示されます。

タスク 5. Kubernetes の Deployment と Service の各リソースを作成する

このセクションでは、Kubernetes の Deployment と Service のリソースの仕様を含むテンプレート ファイル(yaml)を変更して、Kubernetes Engine クラスタにこれらのリソースを作成します。

Kubernetes の Deployment ファイルを作成する

  1. コードエディタで、frontend-deployment.yaml ファイルを開きます。ファイルのスケルトンが作成されています。プレースホルダをプロジェクトに固有の値に置き換えてください。

  2. 以下の値を使用して、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 つのノードに分散します。

  3. ファイルを保存します。

  4. 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 つのノードのいずれかに配置します。

  5. ファイルを保存します。

  6. frontend-service.yaml ファイルの内容を確認します。

    注: Service は、ロードバランサを使用してフロントエンド Deployment を公開します。ロードバランサは、クライアントからのリクエストをフロントエンド Pod の 3 つのレプリカすべてに送信します。

Deployment ファイルと Service ファイルを実行する

  1. Cloud Shell で、クイズのフロントエンド Deployment をプロビジョニングします。

    kubectl create -f ./frontend-deployment.yaml
  2. クイズのバックエンド Deployment をプロビジョニングします。

    kubectl create -f ./backend-deployment.yaml
  3. クイズのフロントエンド Service をプロビジョニングします。

    kubectl create -f ./frontend-service.yaml

各コマンドで、Kubernetes Engine にリソースがプロビジョニングされます。プロセスの完了には数分かかります。

タスク 6. クイズ アプリケーションをテストする

このセクションでは、デプロイされた Pod と Service を確認し、クイズ アプリケーションに移動します。

デプロイされたリソースを確認する

  1. コンソールで、ナビゲーション メニュー > [Kubernetes Engine] > [ワークロード] をクリックします。quiz-frontendquiz-backend の 2 つのポッドが表示されます。

    Pod のステータスには OK または作成中と表示されます。

  2. quiz-frontend をクリックして quiz-frontend の概要を表示します。

  3. 下にスクロールして、[マネージド Pod] を表示します。

    quiz-frontend ロードバランサのステータスには、作成中または OK と表示されます。Service が OK になったら続行します。Service の準備が整うと、IP アドレスのエンドポイントが表示されます。

  4. [サービスの公開] の [エンドポイント] に示されている IP アドレスを選択し、ブラウザの新しいタブで開きます。

  5. テストを受けて、アプリケーションが想定どおりに動作することを確認します。

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします