アプリを GKE クラスタにデプロイする
このクイックスタートでは、サンプル ウェブサーバーのコンテナ化されたアプリケーションを Google Kubernetes Engine(GKE)クラスタにデプロイします。ここでは、クラスタを作成する方法と、クラスタにアプリケーションをデプロイしてユーザーがアクセスできるようにする方法について説明します。
このページは、クラウド リソースのプロビジョニングと構成、アプリとサービスのデプロイを行うオペレーターとデベロッパーを対象としています。 Google Cloudのコンテンツで参照する一般的なロールとタスク例の詳細については、一般的な 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. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the Artifact Registry and Google Kubernetes Engine APIs. Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- 
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the Artifact Registry and Google Kubernetes Engine APIs. Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- PROJECT_ID: Your project ID.
- USER_IDENTIFIER: The identifier for your user account. For example,- myemail@example.com.
- ROLE: The IAM role that you grant to your user account.
必要なロール
          Grant roles to your user account. Run the following command once for each of the following
          IAM roles:
          roles/container.admin
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Replace the following:
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 プロセスを実行します。アプリケーションをクラスタにデプロイすると、そのアプリケーションがこれらのノードで実行されます。
このセクションでは、Autopilot モードでクラスタを作成する方法について説明します。このモードは、ほとんどの本番環境ユースケースで推奨されるクラスタモードです。これらの操作は、GKE Standard モードのクラスタに対して行うこともできます。
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-serverPod が実行されているはずです。
- hello-serverService を検査するには、- kubectl get serviceを使用します。- kubectl get service hello-server- このコマンドの出力で、 - EXTERNAL-IP列から Service の外部 IP アドレスをコピーします。
- 外部 IP アドレスと公開ポートを指定して、ウェブブラウザでアプリケーションを表示します。 - http://EXTERNAL_IP
これで、コンテナ化されたウェブ アプリケーションが GKE にデプロイされました。
GKE リソースをアプリケーション中心の方法で追跡して整理するには、リソースを Service とワークロードとして App Hub アプリケーションに追加します。
App Hub でサポートされているリソースについて詳しくは、サポートされているリソースをご覧ください。
プロジェクトに App Hub を設定する方法については、App Hub を設定するをご覧ください。
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、リソースを含む 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 の無料トライアル