クイックスタート

このクイックスタートでは、Kubernetes Engine でコンテナ化されたアプリケーションをデプロイする方法を説明します。

始める前に

次の手順で Google Kubernetes Engine API を有効にします。
  1. Google Cloud Platform Console で Kubernetes Engine ページにアクセスします。
  2. プロジェクトを作成または選択します。
  3. API と関連サービスが有効になるのを待ちます。これには数分かかることがあります。
  4. プロジェクトに対する課金を有効にします。

    課金を有効にする

シェルを選択する

このクイックスタートを完了するには、Google Cloud Shell またはローカルシェルを使用できます。

Google Cloud Shell は、Google Cloud Platform(GCP)上でホストされているリソースを管理するためのシェル環境です。Cloud Shell には gcloud および kubectl コマンドライン ツールがプリインストールされています。gcloud は GCP への主要なコマンドライン インターフェースを提供し、kubectl は Kubernetes クラスタに対してコマンドを実行するためのコマンドライン インターフェースを提供します。

ローカルシェルを使用する場合は、ご使用の環境に gcloud および kubectl コマンドライン ツールをインストールする必要があります。

Cloud Shell

Cloud Shell を起動するには、次の手順に従います。

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

    Google Cloud Platform コンソール

  2. コンソールの右上隅にある [Google Cloud Shell の有効化] ボタン をクリックします。

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

ローカルシェル

gcloudkubectl をインストールするには、次の手順に従います。

  1. Google Cloud SDK をインストールします。この SDK に gcloud コマンドライン ツールが含まれています。
  2. Cloud SDK をインストールした後、次のコマンドを実行して kubectl コマンドライン ツールをインストールします。

    gcloud components install kubectl
    

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

作業を開始する前に、gcloud を使用して、デフォルトのプロジェクトおよびコンピューティング ゾーンの 2 つのデフォルト設定を構成してください。

gcloud では処理対象のプロジェクトとコンピューティング ゾーンを指定する必要があるため、これらのデフォルト設定を構成すると gcloud コマンドを簡単に実行できるようになります。また、--project--zone--cluster などのオペレーション フラグを gcloud コマンドに渡すことで、これらの設定を指定したり、デフォルト設定をオーバーライドしたりできます。

デフォルトのプロジェクトとコンピューティング ゾーンを構成した後、Kubernetes Engine リソースを作成すると、それらのリソースは自動的にそのプロジェクトおよびゾーンに作成されます。

デフォルトのプロジェクトの設定

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

デフォルトのプロジェクトを設定するには、Cloud Shell から次のコマンドを実行します。

gcloud config set project [PROJECT_ID]

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

デフォルトのコンピューティング ゾーンの設定

コンピューティング ゾーンとは、クラスタとそのリソースが有効になるリージョンのおおよその場所です。たとえば、us-west1-aus-west リージョンのゾーンです。

デフォルトのコンピューティング ゾーンを設定するには、次のコマンドを実行します。

gcloud config set compute/zone [COMPUTE_ZONE]

ここで、[COMPUTE_ZONE] は目的の地理的コンピューティング ゾーン(us-west1-a など)です。

Kubernetes Engine クラスタの作成

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

クラスタを作成するには、次のコマンドを実行します。

gcloud container clusters create [CLUSTER_NAME]

ここで、[CLUSTER_NAME] はクラスタに付ける名前です。

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

クラスタを作成した後、そのクラスタと相互作用するために必要な認証情報を取得します。

クラスタに対して認証を行うには、次のコマンドを実行します。

gcloud container clusters get-credentials [CLUSTER_NAME]

アプリケーションをクラスタにデプロイする

クラスタが作成されたので、このクラスタにコンテナ化されたアプリケーションをデプロイできます。このクイックスタートでは、サンプルとして用意されている hello-app というウェブ アプリケーションをデプロイできます。

Kubernetes Engine では、Kubernetes オブジェクトを使用してクラスタのリソースを作成および管理します。Kubernetes には、ウェブサーバーのようなステートレス アプリケーションをデプロイするための Deployment オブジェクトが用意されています。 インターネットからアプリケーションにアクセスする際のルールと負荷分散を定義するには、Service オブジェクトを使用します。

Deployment を作成する

クラスタで hello-app を実行するには、次のコマンドを実行します。

kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080

上記の Kubernetes コマンド kubectl run は、hello-server という名前の新しい Deployment を作成します。この Deployment のポッドは、そのコンテナ内で hello-app イメージを実行します。

コマンドの内容:

  • --image はデプロイするコンテナ イメージを指定します。上記の例では、このコマンドによって Google Container Registry バケット gcr.io/google-samples/hello-app からサンプル イメージがプルされます。プルするイメージの特定のバージョンは、:1.0 で指定されています。バージョンが指定されていない場合は、最新バージョンが使用されます。
  • --port はコンテナで公開するポートを指定します。

Deployment を公開する

アプリケーションをデプロイした後は、そのアプリケーションをインターネットに公開してユーザーがアクセスできるようにする必要があります。アプリケーションを公開するには、Service を作成します。Service は、アプリケーションと外部トラフィックに公開する Kubernetes リソースです。

アプリケーションを公開するには、次の kubectl expose コマンドを実行します。

kubectl expose deployment hello-server --type "LoadBalancer"

--type="LoadBalancer" フラグを渡すと、コンテナの Compute Engine ロードバランサが作成されます。ロードバランサは、Compute Engine のロードバランサ料金に従って課金されます。

アプリケーションの検査と表示

  1. hello-server Service を検査するには、kubectl get を実行します。

    kubectl get service hello-server
    

    このコマンドの出力で、EXTERNAL IP 列に示されている Service の外部 IP アドレスをコピーします。

  2. ウェブブラウザで、公開されているポートを指定した外部 IP アドレスを使用して、アプリケーションを表示します。

    http://[EXTERNAL_IP]:8080
    

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

クリーンアップ

このチュートリアルで使用するリソースで Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

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

    kubectl delete service hello-server
    
  2. gcloud container clusters delete を実行してクラスタを削除します。

    gcloud container clusters delete [CLUSTER_NAME]
    

オプション: hello-app コードのレビュー

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

hello-appDocker コンテナ イメージとしてパッケージ化されています。コンテナ イメージは、Google Container Registry などの任意の Docker イメージ レジストリに格納されます。hello-app は、gcr.io/google-samples/hello-app という名前の Container Registry バケットでホストされています。

main.go

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

package main

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

func main() {
	port := "8080"
	if fromEnv := os.Getenv("PORT"); fromEnv != "" {
		port = fromEnv
	}

	server := http.NewServeMux()
	server.HandleFunc("/", hello)
	log.Printf("Server listening on port %s", port)
	log.Fatal(http.ListenAndServe(":"+port, server))
}

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"]

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Kubernetes Engine のドキュメント