クイックスタート

このクイックスタートでは、シンプルなウェブサーバーのコンテナ化されたアプリケーションを Google Kubernetes Engine(GKE)クラスタにデプロイします。ここでは、クラスタを作成する方法と、クラスタにアプリケーションをデプロイしてユーザーがアクセスできるようにする方法について説明します。

このクイックスタートは、Kubernetes の基本知識があることを前提としています。

始める前に

次の手順で Kubernetes Engine API を有効にします。
  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Artifact Registry and Google Kubernetes Engine API を有効にします。

    API を有効にする

次の利用可能な割り当てがあることを確認します。

  • クラスタのリージョン内の Compute Engine CPU。
  • 使用中の IP アドレス。

使用可能な割り当てを確認するには、Cloud Console を使用してください。

Cloud Shell を起動する

このチュートリアルでは、Google Cloud でホストされているリソースを管理するためのシェル環境である Cloud Shell を使用します。

Cloud Shell には、gcloudkubectl のコマンドライン ツールがプリインストールされています。gcloud ツールは Google Cloud への主要なコマンドライン インターフェースを提供し、kubectl は Kubernetes クラスタにコマンドを実行するためのコマンドライン インターフェースを提供します。

Cloud Shell を起動します。

  1. Google Cloud Console に移動します。

    Google Cloud Console

  2. コンソールの右上隅にある [Cloud Shell をアクティブにする] ボタン をクリックします。

コンソールの下部にあるフレーム内で Cloud Shell セッションが開きます。このシェルで gcloud コマンドと kubectl コマンドを実行します。

gcloud ツールのデフォルトの設定を構成する

gcloud ツールを使用してデフォルト設定(デフォルトのプロジェクトコンピューティング ゾーンコンピューティング リージョン)を構成します。

プロジェクトにはプロジェクト ID があり、これは固有の識別子になります。最初にプロジェクトを作成するときに、自動的に生成されるプロジェクト ID を使用することも、独自のプロジェクト ID を作成することもできます。

コンピューティング ゾーンとは、クラスタとそのリソースが存在するリージョン内のロケーションです。たとえば、us-west1-aus-west リージョン内のゾーンです。コンピューティング リージョンとは、クラスタとそのリソースが存在するリージョン(例: us-west)です。

これらのデフォルト設定を構成すると、gcloud コマンドの実行が簡単になります。これは、gcloud で目的のプロジェクトとロケーションを指定する必要があるためです。これらの設定を指定することも、gcloud コマンドに --project--zone--region--cluster などのフラグを使用してデフォルト設定を上書きすることもできます。

デフォルトのプロジェクト、ゾーン、リージョンを構成した後に GKE リソースを作成すると、そのプロジェクト、ゾーン、リージョンにリソースが自動的に作成されます。

Cloud Shell で次の操作を行います。

  1. デフォルト プロジェクトを設定します。

    gcloud config set project PROJECT_ID
    

    PROJECT_ID を実際のプロジェクト ID に置き換えます。

  2. デフォルト ゾーンを設定します。

    gcloud config set compute/zone COMPUTE_ZONE
    

    COMPUTE_ZONE は、実際のコンピューティング ゾーンus-west1-a など)で置き換えます。

  3. デフォルト リージョンを設定します。

    gcloud config set compute/region COMPUTE_REGION
    

    COMPUTE_REGION は、実際のコンピューティング リージョンus-west1 など)で置き換えます。

GKE クラスタを作成する

クラスタは、少なくとも 1 つのクラスタのコントロール プレーン マシンと、ノードと呼ばれる複数のワーカーマシンで構成されます。ノードは Compute Engine 仮想マシン(VM)インスタンスであり、自身をクラスタの一部にするために必要な Kubernetes プロセスを実行します。アプリケーションをクラスタにデプロイすると、そのアプリケーションがこれらのノードで実行されます。

GKE でクラスタを作成するには、運用モード(Standard または Autopilot)を選択する必要があります。Standard モードを使用すると、クラスタはゾーンクラスタ(このチュートリアル)になります。Autopilot モードを使用すると、クラスタはリージョン クラスタになります。

Standard

hello-cluster という名前の 1 ノードの Standard クラスタを作成します。

gcloud container clusters create hello-cluster --num-nodes=1

Autopilot

hello-cluster という名前の Autopilot クラスタを作成します。

 gcloud container clusters create-auto hello-cluster

クラスタの作成が完了するまで数分かかることがあります。

クラスタの認証情報を取得する

クラスタの作成が完了したら、そのクラスタとやり取りするために必要な認証情報を取得します。

gcloud container clusters get-credentials hello-cluster

このコマンドにより、作成したクラスタを使用するように 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 の Podhello-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 のロードバランサ料金に従って課金されます。

アプリケーションを検査して表示する

  1. 実行中の Pod を検査するには、kubectl get pods を使用します。

    kubectl get pods
    

    クラスタで 1 つの hello-server Pod が実行されているはずです。

  2. hello-server Service を検査するには、kubectl get service を使用します。

    kubectl get service hello-server
    

    このコマンドの出力で、EXTERNAL-IP 列から Service の外部 IP アドレスをコピーします。

  3. 外部 IP アドレスと公開ポートを指定して、ウェブブラウザでアプリケーションを表示します。

    http://EXTERNAL_IP
    

これで、コンテナ化されたウェブ アプリケーションが GKE にデプロイされました。

クリーンアップ

このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。

  1. kubectl delete を実行して、アプリケーションの Service を削除します。

    kubectl delete service hello-server
    

    このコマンドにより、Deployment の公開時に作成した Compute Engine ロードバランサが削除されます。

  2. gcloud container clusters delete を実行して、クラスタを削除します。

    gcloud container clusters delete hello-cluster
    

省略可: hello-app コードのレビュー

hello-app は、main.goDockerfile という次の 2 つのファイルで構成されるシンプルなウェブサーバー アプリケーションです。

hello-app は、Docker コンテナ イメージとしてパッケージ化されています。コンテナ イメージは、Artifact Registry などの任意の Docker イメージ レジストリに格納されます。hello-appus-docker.pkg.dev/google-samples/containers/gke/hello-app の Artifact Registry リポジトリにホストされています。

main.go

main.go は、Go プログラミング言語で作成されたウェブサーバーの実装です。このサーバーは、HTTP リクエストに対して「Hello, world!」というメッセージを返します。

package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

func main() {
	// register hello function to handle all requests
	mux := http.NewServeMux()
	mux.HandleFunc("/", hello)

	// use PORT environment variable, or default to 8080
	port := os.Getenv("PORT")
	if port == "" {
		port = "8080"
	}

	// start the web server on port and accept requests
	log.Printf("Server listening on port %s", port)
	log.Fatal(http.ListenAndServe(":"+port, mux))
}

// hello responds to the request with a plain-text "Hello, world" message.
func hello(w http.ResponseWriter, r *http.Request) {
	log.Printf("Serving request: %s", r.URL.Path)
	host, _ := os.Hostname()
	fmt.Fprintf(w, "Hello, world!\n")
	fmt.Fprintf(w, "Version: 1.0.0\n")
	fmt.Fprintf(w, "Hostname: %s\n", host)
}

Dockerfile

Dockerfile は、Docker でビルドするイメージを記述します。記述内容には、イメージのリソースと依存関係のすべてが含まれ、アプリを公開するネットワーク ポートも指定します。このファイルの動作については、Docker ドキュメントの Dockerfile リファレンスをご覧ください。

FROM golang:1.8-alpine
ADD . /go/src/hello-app
RUN go install hello-app

FROM alpine:latest
COPY --from=0 /go/bin/hello-app .
ENV PORT 8080
CMD ["./hello-app"]

次のステップ

使ってみる

Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオで GKE のパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。

GKE の無料トライアル