arrow_back

アプリ開発 - Kubernetes Engine へのアプリケーションのデプロイ: Python

ログイン 参加
700 以上のラボとコースにアクセス

アプリ開発 - Kubernetes Engine へのアプリケーションのデプロイ: Python

ラボ 2時間 universal_currency_alt クレジット: 5 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
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 をアクティブにする] ボタンをクリックします。

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

環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト 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. クイズ アプリケーションを準備する

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

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

  1. ラボ用にリポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
  1. 作業ディレクトリへのショートカットとしてソフトリンクを作成します。
ln -s ~/training-data-analyst/courses/developingapps/v1.3/python/kubernetesengine ~/kubernetesengine

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

  1. このラボのサンプル ファイルが含まれているディレクトリに移動します。
cd ~/kubernetesengine/start
  1. クイズ アプリケーションを構成します。
. prepare_environment.sh

このスクリプト ファイルを実行すると、以下の処理が行われます。

  • Google App Engine アプリケーションを作成する。
  • 環境変数 GCLOUD_PROJECTGCLOUD_BUCKET をエクスポートする。
  • Python 3 対応の隔離された virtualenv Python 環境を作成して有効にする。
  • pip を更新し、pip install -r requirements.txt を実行する。
  • Google Cloud Datastore にエンティティを作成する。
  • Google Cloud Pub/Sub トピックを作成する。
  • Cloud Spanner のインスタンス、データベース、テーブルを作成する。
  • Google Cloud Platform のプロジェクト ID を出力する。

クイズ アプリケーションが構成されると、次のメッセージが表示されます。

メッセージの出力例:

Creating Cloud Pub/Sub topic Created topic [projects/qwiklabs-gcp-92b7e5716e0cbf7e/topics/feedback]. Created subscription [projects/qwiklabs-gcp-92b7e5716e0cbf7e/subscriptions/worker-subscription]. Creating Cloud Spanner Instance, Database, and Table Creating instance...done. Creating database...done. Project ID: qwiklabs-gcp-92b7e5716e0cbf7e

タスク 2. コードを確認する

このセクションでは、アプリケーションのファイルを確認します。

ファイルの内容の表示および編集には、Cloud Shell にインストールされている shell エディタ(nanovim)または Cloud Shell コードエディタを使用できます。このラボでは Cloud Shell コードエディタを使用します。

Cloud Shell コードエディタを起動する

  • Cloud Shell で [エディタを開く] をクリックして、コードエディタを起動します。

コードを調べる

  • /kubernetesengine/start に移動します。

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

ウェブ アプリケーションは、frontend というフォルダにあります。

Cloud Pub/Sub にサブスクライブしてメッセージを処理するワーカー アプリケーションのコードは、backend というフォルダにあります。

frontendbackend のフォルダにある Dockerfile は Docker の構成ファイルで、backend-deployment.yaml ファイルと frontend-deployment.yaml ファイルは Kubernetes Engine の構成ファイルです。

タスク 3. Kubernetes Engine クラスタを作成して接続する

Kubernetes Engine クラスタを作成する

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

  2. [作成] をクリックしてから、Standard クラスタモードの横の [構成] をクリックします。

  3. クラスタを構成します。次の項目を、記載されている値に設定します。他はすべてデフォルト値のままにします。

プロパティ

名前

quiz-cluster

ゾーン

us-central1-b

[default-pool] > [セキュリティ] > [アクセス スコープ]

[すべての Cloud API に完全アクセス権を許可] を選択

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

クラスタに接続する

このセクションでは、クイズ アプリケーションを Kubernetes クラスタに接続します。

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

  2. [クラスタに接続] で、[Cloud Shell で実行] をクリックします。

  3. Cloud Shell で Enter キーを押して、事前に入力されているコマンドを実行します。これは、gcloud container clusters get-credentials quiz-cluster --zone us-central1-b --project [プロジェクト-ID] のようなコマンドです。

  4. 次のコマンドを実行して、クラスタ内の Pod を一覧表示します。

kubectl get pods

クラスタ内に Pod がないため、「No resources found」のようなレスポンスが返されます。これで、kubectl コマンドライン ツールでクラスタへの操作を行えるようセキュリティが構成済みであることを確認できました。

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

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

フロントエンド用とバックエンド用の Dockerfile を作成する

  1. Cloud Shell コードエディタで frontend/Dockerfile を開き、以下の処理を行うコードのブロックを追加します。
  • Dockerfile コマンドを記述して、開始点として Google の Python App Engine イメージを使用するカスタム Docker イメージの作成を初期化します。
  • Dockerfile コマンドを記述して、仮想環境を有効化します。
  • Dockerfile コマンドを記述して、ビルドプロセスの一部として「pip install」を実行します。
  • Dockerfile コマンドを記述して、現在のフォルダの内容をコンテナの /app パスに追加します。
  • gunicorn」で始まるステートメントを入力して、Dockerfile を完成させます。コンテナの実行時にこのステートメントが実行されます。Gunicorn(Green Unicorn)は、Python ウェブ サーバー ゲートウェイ インターフェース(WSGI)の仕様に対応している HTTP サーバーです。
  1. 次のコードをコピーして Dockerfile に貼り付けます。
FROM gcr.io/google_appengine/python RUN virtualenv -p python3.7 /env ENV VIRTUAL_ENV /env ENV PATH /env/bin:$PATH ADD requirements.txt /app/requirements.txt RUN pip install -r /app/requirements.txt ADD . /app CMD gunicorn -b 0.0.0.0:$PORT quiz:app
  1. backend/Dockerfile ファイルを開き、次のコードをコピーして貼り付けます。
FROM gcr.io/google_appengine/python RUN virtualenv -p python3.7 /env ENV VIRTUAL_ENV /env ENV PATH /env/bin:$PATH ADD requirements.txt /app/requirements.txt RUN pip install -r /app/requirements.txt ADD . /app CMD python -m quiz.console.worker

Cloud Build を使用して Docker イメージをビルドする

  1. Cloud Shell で、start フォルダが作業ディレクトリになっていることを確認します。
cd ~/kubernetesengine/start
  1. 次のコマンドを実行して、フロントエンド用の Docker イメージをビルドします。
gcloud builds submit -t gcr.io/$DEVSHELL_PROJECT_ID/quiz-frontend ./frontend/

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

  1. 次のコマンドを実行して、バックエンド用の Docker イメージをビルドします。
gcloud builds submit -t gcr.io/$DEVSHELL_PROJECT_ID/quiz-backend ./backend/

バックエンド用の Docker イメージの準備ができると、最後に次のようなメッセージが表示されます。

DONE ----------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS be0326f4-3f6f-42d6-850f-547e260dd4d7 2018-06-13T22:20:16+00:00 50S gs://qwiklabs-gcp-3f89d0745056ee31_cloudbuil d/source/1528928414.79-4914d2a972f74e188f40ced135662b7d.tgz gcr.io/qwiklabs-gcp-3f89d0745056ee31/quiz-backend (+1 more ) SUCCESS
  1. Cloud コンソールナビゲーション メニューで、[Container Registry] をクリックします。quiz-frontendquiz-backend の 2 つの Pod が表示されます。

  1. quiz-frontend をクリックします。
注: イメージの名前(ハッシュ)とタグ(latest)が表示されます。

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

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

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

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

プレースホルダ名

[GCLOUD_PROJECT]

GCP プロジェクト ID。ラボの左側のパネルで確認できます。この ID は、
Cloud Shell でコマンド
echo $GCLOUD_PROJECT を実行して表示することもできます。

[GCLOUD_BUCKET]

プロジェクト内のメディア バケット([GCLOUD_PROJECT]-media)の Cloud Storage バケット名。Cloud Shell でコマンド echo $GCLOUD_BUCKET を実行してバケット名を表示することもできます。

[FRONTEND_IMAGE_IDENTIFIER]

フロントエンド イメージの識別子(gcr.io/[GCLOUD_PROJECT]/quiz-frontend の形式)

注: quiz-frontend の Deployment は、フロントエンド Docker イメージの 3 つのレプリカを Kubernetes Pod にプロビジョニングし、Kubernetes Engine クラスタの 3 つのノードに分散します。
  1. ファイルを保存します。
  2. 以下の値を使用して、backend-deployment.yaml ファイル内のプレースホルダを置き換えます。

プレースホルダ名

[GCLOUD_PROJECT]

GCP プロジェクト ID

[GCLOUD_BUCKET]

プロジェクト内のメディア バケット([GCLOUD_PROJECT]-media)の Cloud Storage バケット ID。

[BACKEND_IMAGE_IDENTIFIER]

バックエンド イメージの識別子(gcr.io/[GCLOUD_PROJECT]/quiz-backend の形式)

注: quiz-backend の Deployment は、バックエンド Docker イメージの 2 つのレプリカを Kubernetes Pod にプロビジョニングし、Kubernetes Engine クラスタの 3 つのノードのうちの 2 つに分散します。
  1. ファイルを保存します。
  2. frontend-service.yaml ファイルの内容を確認します。
注: Service はロードバランサを使用してフロントエンド Deployment を公開します。ロードバランサは、クライアントからのリクエストをフロントエンド Pod の 3 つのレプリカすべてに送信します。

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

  1. Cloud Shell で、クイズのフロントエンド Deployment をプロビジョニングします。
kubectl create -f ./frontend-deployment.yaml
  1. クイズのバックエンド Deployment をプロビジョニングします。
kubectl create -f ./backend-deployment.yaml
  1. クイズのフロントエンド Service をプロビジョニングします。
kubectl create -f ./frontend-service.yaml 注: 上の各コマンドにより、Kubernetes Engine にリソースがプロビジョニングされます。処理が完了するまでに数分かかります。

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

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

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

  1. Google Cloud コンソールナビゲーション メニューで、[Kubernetes Engine] をクリックします。
  2. [ワークロード] をクリックします。
注: quiz-frontend と quiz-backend の 2 つのコンテナが表示されます。 ステータスは、[OK] または作成処理中であることを示す内容が表示されます。
  1. quiz-frontend をクリックします。[マネージド Pod] に 3 つの quiz-frontend Pod があります。

  2. 下の方にある [Service] の [エンドポイント] で IP アドレスをコピーして、ブラウザの新しいタブまたはウィンドウの URL フィールドに貼り付けます。

  1. クイズ アプリケーションが開きます。これはアプリケーションが正常にデプロイされたことを意味します。ここでラボを終了することもできますが、時間が残っている場合はクイズを作成してみましょう。

ラボを終了する

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

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

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

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

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

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

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

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

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

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

ありがとうございます。

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

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。