チェックポイント
Configure the Quiz application
/ 30
Create Kubernetes engine cluster
/ 20
Build Docker Images using Container Builder
/ 20
Create Kubernetes Deployment and Service Resources
/ 30
アプリ開発: Kubernetes Engine へのアプリケーションのデプロイ - Python
GSP188
概要
Google Kubernetes Engine では、Google のインフラストラクチャを使用して、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを行うマネージド環境が提供されます。Kubernetes Engine で提供される環境は複数のマシン(具体的には Google Compute Engine インスタンス)で構成されています。これらのマシンがグループ化されてクラスタを形成します。
クラスタの操作には、Kubernetes のメカニズムが使用されます。Kubernetes のコマンドとリソースを使用することで、アプリケーションのデプロイや管理、管理タスクの実行やポリシーの設定、デプロイ済みのワークロードの状態監視を行うことができます。
このラボでは、Container Builder や Container Registry などの Google Cloud Platform のリソースと、デプロイメント、ポッド、サービスなどの Kubernetes のリソースを活用して、Kubernetes Engine にクイズ アプリケーションをデプロイします。
目標
このラボでは、次のタスクの実行方法について学びます。
- Dockerfile を作成して、クイズ アプリケーションのフロントエンドとバックエンドのコードをデプロイ用にパッケージ化する。
- Container Builder を利用して、Docker イメージを作成する。
- クイズ アプリケーションをホストする Kubernetes Engine クラスタをプロビジョニングする。
- Kubernetes のデプロイメントを使用して、複製したポッドを Kubernetes Engine にプロビジョニングする。
- Kubernetes のサービスを活用して、クイズのフロントエンド用ロードバランサをプロビジョニングする。
Qwiklabs の設定
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}} [ラボの詳細] パネルでも [ユーザー名] を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}} [ラボの詳細] パネルでも [パスワード] を確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
Cloud Shell コードエディタを起動する
Cloud Shell で、[エディタを開く] アイコン(鉛筆の形)をクリックしてコードエディタを起動します。
クイズ アプリケーションを用意する
このセクションでは、Cloud Shell にアクセスしてクイズ アプリケーションを含む git リポジトリのクローンを作成してから、環境変数を設定し、アプリケーションを実行します。
Cloud Shell でソースコードのクローンを作成する
[ターミナルを開く] をクリックして、レポジトリラボをクローンします。
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
作業ディレクトリのショートカットとしてソフトリンクを作成します。
ln -s ~/training-data-analyst/courses/developingapps/v1.2/python/kubernetesengine ~/kubernetesengine
クイズ アプリケーションを構成する
作業ディレクトリを変更します。
cd ~/kubernetesengine/start
クイズ アプリケーションを構成します。
. prepare_environment.sh
このスクリプト ファイルを実行すると、以下の処理が行われます。
- Google App Engine アプリケーションが作成される。
-
GCLOUD_PROJECT
とGCLOUD_BUCKET
の環境変数がエクスポートされる。 - 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
[進行を確認] をクリックして、目標に沿って進行していることを確認します。
コードを確認する
このセクションでは、アプリケーションのファイルを確認します。
Cloud Shellでインストールしたshellエディター(例:nano
と vim
と Cloud Shellエディター)を使用してファイルを拝見と変更することができます。このラボでCloud Shellエディターを使用します。
このラボでは、Cloud Shell コードエディタを使用してクイズ アプリケーションのコードを確認します。
コードを確認する
training-data-analyst/courses/developingapps/v1.2/python/kubernetesengine/start
に移動します。
クイズ アプリケーションのフォルダ構成は、Kubernetes Engine でデプロイされるときの状態が反映されています。
ウェブ アプリケーションは、frontend
というフォルダにあります。
Cloud Pub/Sub にサブスクライブしてメッセージを処理するワーカー アプリケーションのコードは、backend
というフォルダにあります。
frontend
と backend
のフォルダにある [Dockerfile
] は Docker の構成ファイルで、[backend-deployment.yaml
] ファイルと [frontend-deployment.yaml
] ファイルは Kubernetes Engine の構成ファイルです。
Kubernetes Engine クラスタを作成し、それに接続する
Kubernetes Engine クラスタを作成する
-
Cloud Platform Console で、ナビゲーション メニュー > [Kubernetes Engine] > [クラスタ] をクリックします。
-
[クラスタを作成] をクリックします。
-
クラスタを設定します。以下に提供してある値を入力します、他の値をそのままで置きます:
プロパティ |
値 |
名前 |
|
ゾーン |
|
default Pool > セキュリティ > アクセス スコープ |
[すべての Cloud API に完全アクセス権を許可] を選択して、[保存]をクリックします。 |
-
[作成] をクリックします。 クラスタがプロビジョニングされるまでに数分かかります。
[進行を確認] をクリックして、目標に沿って進行していることを確認します。
クラスタに接続する
このセクションでは、クイズ アプリケーションを Kubernetes クラスタに接続します。
- クラスタの準備ができたら、[接続] をクリックします。
-
[クラスタに接続] で、[Cloud Shell で実行] をクリックして、「
gcloud container clusters get-credentials quiz-cluster --zone us-central1-b --project [Project-ID]
」に類似したコマンドを実行します。Cloud shell で Enter キーを押して、コマンドを実行します。 -
次のコマンドを実行して、クラスタ内のポッドを一覧表示します。
kubectl get pods
クラスタ内にポッドがないため、「No resources found
」のようなレスポンスが返されます。これにより、セキュリティが構成済みで、kubectl
コマンドライン ツールでクラスタへの操作が行えることを確認できました。
Container Builder を使用して Docker イメージを作成する
このセクションでは、アプリケーションのフロントエンドとバックエンド用の Dockerfile を作成して、Container Builder を使用してイメージを作成しておよびそのイメージを Container Registry に保存します。
フロントエンドとバックエンド用の Dockerfile を作成する
Cloud Shell コードエディタで frontend/Dockerfile
を開き、以下の処理を行うコードのブロックを追加します。
- Dockerfile コマンドを記述して、開始点として Google の Python App Engine イメージを使用するカスタム Docker イメージの作成を初期化します。
- Dockerfile コマンドを記述して、仮想環境を有効化します。
- Dockerfile コマンドを記述して、ビルドプロセスの一部として「
pip install
」を実行します。 - Dockerfile コマンドを記述して、現在のフォルダの内容をコンテナの
/app
パスに追加します。 - 「
gunicorn
」で始まるステートメントを入力して、Dockerfile
を完成させます。コンテナの実行時にこのステートメントが実行されます。Gunicorn(Green Unicorn)は HTTP サーバーで、Python ウェブ サーバー ゲートウェイ インターフェース(WSGI)の仕様に対応しています。
次のコードをコピーして 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
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
Container Builder で Docker イメージを作成する
-
Cloud Shellで、[
start
]フォルダにあることを確認します: -
フロントエンドDocker イメージを作成ため、次のコマンドを実行します:
cd ~/kubernetesengine/start
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/
バックエンドの 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
-
Cloud Platform Console のナビゲーション メニューで、[Container Registry] をクリックします。
quiz-frontend
とquiz-backend
の 2 つのポッドが表示されます。
- [quiz-frontend] をクリックします。
[進行を確認] をクリックして、目標に沿って進行していることを確認します。
Kubernetes のデプロイメントとサービスのリソースを作成する
このセクションでは、Kubernetes のデプロイメントとサービスのリソースの仕様を含むテンプレート yaml
ファイルを変更し、Kubernetes Engine クラスタでリソースを作成します。
Kubernetes のデプロイメント ファイルを作成する
-
Cloud Shell コードエディタで、[
frontend-deployment.yaml
] ファイルを開きます。
- 以下の値を使用して、[
frontend-deployment.yaml
] ファイルのプレースホルダを置き換えます。
プレースホルダ名 |
値 |
|
GCP プロジェクト ID |
|
プロジェクトのメディア バケットの Cloud Storage バケット名 |
|
フロントエンド イメージの識別子は |
- ファイルを保存します。
- 以下の値を使用して、[
backend-deployment.yaml
] ファイルのプレースホルダを置き換えます。
プレースホルダ名 |
値 |
|
GCP プロジェクト ID |
|
プロジェクトのメディア バケットの Cloud Storage バケット ID |
|
バックエンド イメージの識別子は |
- ファイルを保存します。
- [
frontend-service.yaml
] ファイルの内容を確認します。
デプロイメントとサービスのファイルを実行する
-
Cloud Shell で、クイズのフロントエンド デプロイメントをプロビジョニングします。
kubectl create -f ./frontend-deployment.yaml
-
クイズのバックエンド デプロイメントをプロビジョニングします。
kubectl create -f ./backend-deployment.yaml
-
クイズのフロントエンド サービスをプロビジョニングします。
kubectl create -f ./frontend-service.yaml
[進行を確認] をクリックして、目標に沿って進行していることを確認します。
クイズ アプリケーションをテストする
このセクションでは、デプロイされたポッドとサービスを確認し、クイズ アプリケーションに移動します。
デプロイされたリソースを確認する
- Google Cloud Platform Console のナビゲーション メニューで、[Kubernetes Engine] をクリックします。
- [ワークロード] をクリックします。
-
[quiz-frontend] をクリックします。[管理対象ポッド] に 3 つの quiz-frontend ポッドがあります。
-
下にある[サービスの公開]部分で、[エンドポイント]部分を探して IP アドレスをコピーして、新しいタブとウインドウの URL で入力します。
-
新しいタブでクイズ アプリケーションが開かれます。これはアプリケーションが適切にデプロイされたことを示しています。ここでラボを終了することもできますが、時間が残っている場合はクイズを作成してみましょう。
これで完了です。
これで、セルフペースラボ、App Dev: Deploying the Application into Kubernetes Engine - Python を完了しました。このラボで GCP リソースと Kubernetes リソースを使用してクイズ アプリケーションを実行します。
クエストの終了
この App Dev: Deploying the Application into Kubernetes Engine - Python のセルフペースラボは、「Application Development - Python」と「Cloud Development」 クエストの一部です。クエストとは学習パスを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、次のクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なその他の Qwiklabs のクエストもご確認ください。
次のステップと詳細情報
Kubernetes Engine について学習します。
マニュアルの最終更新日: 2020 年 10 月 16 日
ラボの最終テスト日: 2020 年 10 月 16 日
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。