アプリを GKE クラスタにデプロイする
このクイックスタートでは、サンプルのウェブサーバーのコンテナ化されたアプリケーションを Google Kubernetes Engine(GKE)クラスタにデプロイします。ここでは、クラスタを作成する方法と、クラスタにアプリケーションをデプロイしてユーザーがアクセスできるようにする方法について説明します。
このページは、クラウド リソースのプロビジョニングと構成、アプリとサービスのデプロイを行うオペレーターとデベロッパーを対象としています。コンテンツで参照する一般的なロールとタスク例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。 Google Cloud
このページを読む前に、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 にデプロイされました。
GKE リソースをアプリケーション中心の方法で追跡して整理するには、リソースをサービスとワークロードとして App Hub アプリケーションに追加します。
App Hub でサポートされているリソースについて詳しくは、サポートされているリソースをご覧ください。
プロジェクトで App Hub を設定する方法については、App Hub を設定するをご覧ください。
クリーンアップ
このページで使用したリソースについて、 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 の無料トライアル