このクイックスタートは、Kubernetesの基本知識があることを前提としています。
このページの手順に従うことも、このクイックスタートを Google Cloud トレーニング ラボとして試すこともできます。
始める前に
次の手順で Kubernetes Engine API を有効にします。- Google Cloud Console で Kubernetes Engine ページにアクセスします。
- プロジェクトを作成または選択します。
- API と関連サービスが有効になるのを待ちます。 これには数分かかることがあります。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する。
割り当て要件
このクイックスタートを完了するには、次のものに対して使用可能な割り当て数が必要です。
- クラスタのリージョン内の Compute Engine CPU。
- 使用中の IP アドレス。
使用可能な割り当てを確認するには、Cloud Console を使用してください。
シェルを選択する
このクイックスタートを完了するには、Cloud Shell またはローカルシェルを使用します。
Google Cloud Shell は、Google Cloud でホストされているリソースを管理するためのシェル環境です。Cloud Shell には、gcloud
と kubectl のコマンドライン ツールがプリインストールされています。gcloud
ツールは Google Cloud への主要なコマンドライン インターフェースを提供し、kubectl
は Kubernetes クラスタにコマンドを実行するためのコマンドライン インターフェースを提供します。
ローカルシェルを使用する場合は、環境に gcloud
ツールと kubectl
ツールをインストールする必要があります。
Cloud Shell
Cloud Shell を起動するには、次の手順に従います。
Google Cloud Console に移動します。
コンソールの右上隅にある [Cloud Shell をアクティブにする] ボタン
をクリックします。
コンソールの下部にあるフレーム内で Cloud Shell セッションが開きます。このシェルで gcloud
コマンドと kubectl
コマンドを実行します。
ローカルシェル
gcloud
と kubectl
をインストールするには、次の手順に従います。
- Cloud SDK をインストールします。これには、
gcloud
コマンドライン ツールが含まれています。 Cloud SDK をインストールしたら、次のコマンドを実行して
kubectl
コマンドライン ツールをインストールします。gcloud components install kubectl
gcloud
ツールのデフォルトの設定を構成する
gcloud
ツールを使用して 2 つのデフォルト設定を構成します。1 つはデフォルトのプロジェクト、もう 1 つはコンピューティング ゾーンです。
プロジェクトにはプロジェクト ID があり、これは固有の識別子になります。最初にプロジェクトを作成するときに、自動的に生成されるプロジェクト ID を使用することも、独自のプロジェクト ID を作成することもできます。
コンピューティング ゾーンとは、クラスタとそのリソースが有効になるリージョンのロケーションです。たとえば、us-west1-a
は us-west
リージョン内のゾーンです。
gcloud
コマンドを実行するには、使用するプロジェクトとコンピューティング ゾーンを指定する必要があります。これらのデフォルト設定を構成しておくと、gcloud
コマンドをより簡単に実行できます。これらの設定を指定することも、gcloud
コマンドに --project
、--zone
、--cluster
などのフラグを使用してデフォルト設定を上書きすることもできます。
デフォルトのプロジェクトとコンピューティング ゾーンを構成した後に GKE リソースを作成すると、そのプロジェクトとゾーンにリソースが自動的に作成されます。
デフォルトのプロジェクトの設定
次のコマンドを実行します。project-id
はプロジェクト ID で置き換えます。
gcloud config set project project-id
デフォルトのコンピューティング ゾーンの設定
次のコマンドを実行します。compute-zone
は、コンピューティング ゾーン(us-west1-a
など)で置き換えます。
gcloud config set compute/zone compute-zone
GKE クラスタの作成
クラスタは、少なくとも 1 つのクラスタのコントロール プレーン マシンと、ノードと呼ばれる複数のワーカーマシンで構成されます。ノードは Compute Engine 仮想マシン(VM)インスタンスであり、自身をクラスタの一部にするために必要な Kubernetes プロセスを実行します。アプリケーションをクラスタにデプロイすると、そのアプリケーションがこれらのノードで実行されます。
次のコマンドは、1 ノードのクラスタを作成します。cluster-name
は、使用するクラスタの名前に置き換えます。
gcloud container clusters create cluster-name --num-nodes=1
クラスタの認証情報を取得する
クラスタの作成が完了したら、そのクラスタとやり取りするために必要な認証情報を取得します。
gcloud container clusters get-credentials cluster-name
このコマンドにより、作成したクラスタを使用するように kubectl
が構成されます。
アプリケーションをクラスタにデプロイする
作成したクラスタに、コンテナ化されたアプリケーションをデプロイします。このクイックスタートでは、サンプルとして用意されている hello-app
というウェブ アプリケーションをデプロイできます。
GKE では、クラスタ リソースの作成と管理に Kubernetes オブジェクトを使用します。Kubernetes には、ウェブサーバーのようなステートレス アプリケーションをデプロイするための Deployment オブジェクトが用意されています。インターネットからアプリケーションにアクセスする際のルールと負荷分散を定義するには、Service オブジェクトを使用します。
Deployment を作成する
クラスタで hello-app
を実行するには、次のコマンドを実行します。
kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0
Kubernetes コマンド kubectl create deployment
で、hello-server
という名前の Deployment が作成されます。Deployment の Pod が hello-app
コンテナ イメージを実行します。
コマンドの内容:
--image
にはデプロイするコンテナ イメージを指定します。上の例では、Container Registry バケットgcr.io/google-samples/hello-app
からサンプル イメージが取得されます。:1.0
には、pull するイメージのバージョンを指定します。バージョンを指定しない場合は、最新バージョンが使用されます。
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 のロードバランサ料金に従って課金されます。
アプリケーションの検査と表示
実行中のポッドを検査するには、
kubectl get pods
を使用します。kubectl get pods
クラスタで 1 つの
hello-server
ポッドが実行されているはずです。hello-server
Service を検査するには、kubectl get service
を使用します。kubectl get service hello-server
このコマンドの出力で、
EXTERNAL-IP
列から Service の外部 IP アドレスをコピーします。外部 IP アドレスと公開ポートを指定して、ウェブブラウザでアプリケーションを表示します。
http://external-ip/
これで、コンテナ化されたウェブ アプリケーションが GKE にデプロイされました。
クリーンアップ
このクイックスタートで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。
kubectl delete
を実行して、アプリケーションの Service を削除します。kubectl delete service hello-server
このコマンドにより、Deployment の公開時に作成した Compute Engine ロードバランサが削除されます。
gcloud container clusters delete
を実行して、クラスタを削除します。gcloud container clusters delete cluster-name
省略可: hello-app
コードのレビュー
hello-app
は、main.go
と Dockerfile
という次の 2 つのファイルで構成されるシンプルなウェブサーバー アプリケーションです。
hello-app
は、Docker コンテナ イメージとしてパッケージ化されています。コンテナ イメージは、Container Registry などの任意の Docker イメージ レジストリに格納されます。hello-app
は、gcr.io/google-samples/hello-app
という名前の Container Registry バケットでホストされています。
main.go
main.go
は、Go プログラミング言語で作成されたウェブサーバーの実装です。このサーバーは、HTTP リクエストに対して「Hello, world!」とうメッセージを返します。
Dockerfile
Dockerfile
は、Docker でビルドするイメージを記述します。記述内容には、イメージのリソースと依存関係のすべてが含まれ、アプリを公開するネットワーク ポートも指定します。このファイルの動作については、Docker ドキュメントの Dockerfile リファレンスをご覧ください。