アプリを GKE クラスタにデプロイする
このクイックスタートでは、シンプルなウェブサーバーのコンテナ化されたアプリケーションを Google Kubernetes Engine(GKE)クラスタにデプロイします。ここでは、クラスタを作成する方法と、クラスタにアプリケーションをデプロイしてユーザーがアクセスできるようにする方法について説明します。
このページを読む前に、Kubernetes について理解しておいてください。
始める前に
次の手順で Kubernetes Engine API を有効にします。- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Google Kubernetes Engine APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Google Kubernetes Engine APIs.
Cloud Shell を起動する
このチュートリアルでは、Google Cloud でホストされているリソースを管理するためのシェル環境である Cloud Shell を使用します。
Cloud Shell には、Google Cloud CLI と kubectl コマンドライン ツールがプリインストールされています。gcloud CLI は Google Cloud への主要なコマンドライン インターフェースを提供し、kubectl
は Kubernetes クラスタにコマンドを実行するためのコマンドライン インターフェースを提供します。
Cloud Shell を起動します。
Google Cloud コンソールに移動します。
コンソールの右上隅にある [Cloud Shell をアクティブにする] ボタン をクリックします。
コンソールの下部にあるフレーム内で Cloud Shell セッションが開きます。このシェルで gcloud
コマンドと kubectl
コマンドを実行します。
コマンドを実行する前に、Google Cloud CLI で次のコマンドを使用してデフォルト プロジェクトを設定します。
gcloud config set project PROJECT_ID
PROJECT_ID
を実際のプロジェクト ID に置き換えます。
GKE クラスタを作成する
クラスタは、少なくとも 1 つのクラスタ コントロール プレーン マシンと、ノードと呼ばれる複数のワーカーマシンで構成されます。ノードは Compute Engine 仮想マシン(VM)インスタンスであり、自身をクラスタの一部にするために必要な Kubernetes プロセスを実行します。アプリケーションをクラスタにデプロイすると、そのアプリケーションがこれらのノードで実行されます。
hello-cluster
という名前の Autopilot クラスタを作成します。
gcloud container clusters create-auto hello-cluster \
--location=us-central1
クラスタの認証情報を取得する
クラスタの作成が完了したら、そのクラスタとやり取りするために必要な認証情報を取得します。
gcloud container clusters get-credentials hello-cluster \
--location us-central1
このコマンドにより、作成したクラスタを使用するように kubectl
が構成されます。
アプリケーションをクラスタにデプロイする
作成したクラスタに、コンテナ化されたアプリケーションをデプロイします。このクイックスタートでは、サンプルとして用意されている hello-app
というウェブ アプリケーションをデプロイできます。
GKE では、クラスタ リソースの作成と管理に Kubernetes オブジェクトを使用します。Kubernetes には、ウェブサーバーのようなステートレス アプリケーションをデプロイするための Deployment オブジェクトが用意されています。インターネットからアプリケーションにアクセスする際のルールとロード バランシングを定義するには、Service オブジェクトを使用します。
Deployment を作成する
クラスタで hello-app
を実行するには、次のコマンドを実行してアプリケーションをデプロイする必要があります。
kubectl create deployment hello-server \
--image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Kubernetes コマンド kubectl create deployment
で、hello-server
という名前の Deployment が作成されます。この Deployment の Pod が hello-app
コンテナ イメージを実行します。
このコマンドで:
--image
にはデプロイするコンテナ イメージを指定します。上のコマンドでは、Artifact Registry リポジトリus-docker.pkg.dev/google-samples/containers/gke/hello-app
からサンプル イメージが取得されます。:1.0
には、pull するイメージのバージョンを指定します。バージョンを指定しない場合は、デフォルトのlatest
タグが付いたイメージが使用されます。
Deployment を公開する
アプリケーションをデプロイしたら、ユーザーがアクセスできるように、そのアプリケーションをインターネットに公開する必要があります。アプリケーションを公開するには、Service を作成します。Service は、アプリケーションと外部トラフィックに公開する Kubernetes リソースです。
アプリケーションを公開するには、次の kubectl expose
コマンドを実行します。
kubectl expose deployment hello-server \
--type LoadBalancer \
--port 80 \
--target-port 8080
--type LoadBalancer
フラグを渡すことで、コンテナに Compute Engine ロードバランサが作成されます。--port
フラグを指定すると、インターネット用に公開ポート 80 が初期化されます。--target-port
フラグを使用すると、アプリケーションのポート 8080 にトラフィックがルーティングされます。
ロードバランサは、Compute Engine のロードバランサ料金に従って課金されます。
アプリケーションを検査して表示する
実行中の Pod を検査するには、
kubectl get pods
を使用します。kubectl get pods
クラスタで 1 つの
hello-server
Pod が実行されているはずです。hello-server
Service を検査するには、kubectl get service
を使用します。kubectl get service hello-server
このコマンドの出力で、
EXTERNAL-IP
列から Service の外部 IP アドレスをコピーします。外部 IP アドレスと公開ポートを指定して、ウェブブラウザでアプリケーションを表示します。
http://EXTERNAL_IP
これで、コンテナ化されたウェブ アプリケーションが GKE にデプロイされました。
クリーンアップ
このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。
kubectl delete
を実行して、アプリケーションの Service を削除します。kubectl delete service hello-server
このコマンドにより、Deployment の公開時に作成した Compute Engine ロードバランサが削除されます。
gcloud container clusters delete
を実行して、クラスタを削除します。gcloud container clusters delete hello-cluster \ --location us-central1
省略可: hello-app
コードのレビュー
hello-app
は、main.go
と Dockerfile
という次の 2 つのファイルで構成されるシンプルなウェブサーバー アプリケーションです。
hello-app
は、Docker コンテナ イメージとしてパッケージ化されています。コンテナ イメージは、Artifact Registry などの任意の Docker イメージ レジストリに格納されます。hello-app
は us-docker.pkg.dev/google-samples/containers/gke/hello-app
の Artifact Registry リポジトリにホストされています。
main.go
main.go
は、Go プログラミング言語で作成されたウェブサーバーの実装です。このサーバーは、HTTP リクエストに対して「Hello, world!」というメッセージを返します。
Dockerfile
Dockerfile
は、Docker でビルドするイメージを記述します。記述内容には、イメージのリソースと依存関係のすべてが含まれ、アプリを公開するネットワーク ポートも指定します。このファイルの動作については、Docker ドキュメントの Dockerfile リファレンスをご覧ください。
次のステップ
- クラスタの作成方法について詳しく学ぶ。
- Kubernetes について理解を深める。
- シンプルなウェブサーバー アプリケーションをパッケージ化、ホスト、デプロイする方法を学習する。
- Cloud Code for VS Code、または Cloud Code for IntelliJ を使用して Kubernetes アプリケーションをデプロイする。
- Linux アプリケーションをコンテナに再プラットフォーム化する方法を学習する。
使ってみる
Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオで GKE のパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
GKE の無料トライアル