クイックスタート

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

始める前に

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

    課金を有効にする方法について

シェルを選択する

このクイックスタートを完了するには、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 のドキュメント