このページでは、クラスタとノードプールを作成し、GKE on AWS を使用してサンプル アプリケーションをデプロイするためのクイックスタートの手順について説明します。
Terraform を使用してクラスタを作成する
Terraform を使用してクラスタとノードプールを作成できます。クラスタを作成する前に、Terraform スクリプトで AWS VPC も準備します。
AWS 環境での Terraform の詳細については、Terraform クラスタのリファレンスと Terraform ノードプール リファレンスをご覧ください。
Terraform を使用して VPC とクラスタを作成したら、クラスタにアプリケーションをデプロイするに進み、サンプル アプリケーションをデプロイします。
Terraform を使用せずにクラスタを作成する
AWS VPC を準備し、Terraform を使用せずにクラスタとノードプールを作成する場合は、次の操作を行います。
始める前に
クラスタを作成する前に、前提条件をすべて満たす必要があります。特に、次のリソースを用意する必要があります。
- クラスタが動作する AWS VPC。
- 3 つのコントロール プレーン レプリカ用に最大 3 つの AWS サブネット。それぞれ異なる AWS アベイラビリティ ゾーンに作成する必要があります。
- GKE on AWS がクラスタの管理で前提としている AWS IAM ロール。これには特定の IAM 権限が必要です。
- クラスタデータ(etcd)と構成の保存時の暗号化に使用される KMS 対称 CMK 鍵。
- 各コントロール プレーン レプリカの AWS IAM インスタンス プロファイル。これには特定の IAM 権限が必要です。
- 各コントロール プレーン レプリカを実行する EC2 インスタンスへの SSH アクセスが必要な場合は、EC2 SSH 認証鍵ペア(省略可)。
これらのリソースは、お客様の責任で作成して管理する必要があります。作成したリソースは GKE on AWS のすべてのクラスタ間で共有できます。その他の基盤となるクラスタ スコープ AWS リソースは、GKE on AWS によって管理されます。
gcloud CLI のデフォルトを設定する
gcloud CLI を使用して、デフォルトのプロジェクトと Google Cloud リージョンのデフォルト設定を構成します。
プロジェクトには固有の識別子としてプロジェクト ID があります。プロジェクトを作成するときに、自動的に生成されるプロジェクト ID を使用することも、独自のプロジェクト ID を作成することもできます。
Google Cloud リージョンは、クラスタが管理される場所です。例: us-west1
詳細については、管理リージョンをご覧ください。
こうしたデフォルト設定を構成すると、Google Cloud CLI の実行時に指定する必要がなくなります。--project
フラグと --location
フラグを Google Cloud CLI に渡すことで、設定を指定したり、デフォルト設定をオーバーライドできます。
デフォルトのプロジェクトとロケーションを構成した後に GKE on AWS のリソースを作成する場合は、そのプロジェクトとロケーションにリソースが自動的に作成されます。
デフォルトの設定手順は次のとおりです。
デフォルト プロジェクトを設定します。
gcloud config set project PROJECT_ID
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。デフォルトの管理ロケーションを設定します。
gcloud config set container_aws/location GOOGLE_CLOUD_LOCATION
GOOGLE_CLOUD_LOCATION
は、ロケーション(us-west1
など)に置き換えます。
クラスタの CIDR 範囲を選択する
Kubernetes では、クラスタに 2 つの CIDR 範囲を指定する必要があります。これらの CIDR 範囲は、VPC サブネットで使用される CIDR 範囲と重複しないように選択する必要があります。CIDR 範囲は、クラスタの最大想定サイズに対して十分な大きさである必要があります。
Pod アドレスの CIDR 範囲: 新しい
Pod
が作成されると、この範囲から IP アドレスが割り当てられます。範囲の例: 192.168.208.0/20Service アドレスの CIDR 範囲: 新しい
Service
が作成されると、この範囲から IP アドレスが割り当てられます。範囲の例: 192.168.224.0/20
クラスタを作成する
GKE on AWS でクラスタを作成するには、次のコマンドを使用します。オプションのパラメータなど、このコマンドの詳細については、gcloud container aws create のリファレンス ページをご覧ください。
gcloud container aws clusters create aws-cluster-0 \
--cluster-version 1.29.4-gke.200 \
--aws-region AWS_REGION \
--fleet-project FLEET_PROJECT_ID \
--vpc-id VPC_ID \
--subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
--pod-address-cidr-blocks POD_CIDR_BLOCK \
--service-address-cidr-blocks SERVICE_CIDR_BLOCK \
--role-arn API_ROLE_ARN \
--iam-instance-profile CONTROL_PLANE_PROFILE \
--database-encryption-kms-key-arn DB_KMS_KEY_ARN \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--tags "google:gkemulticloud:cluster=aws-cluster-0"
次のように置き換えます。
AWS_REGION
: クラスタが作成される AWS リージョン。FLEET_PROJECT_ID
: クラスタを登録する フリート ホスト プロジェクト。VPC_ID
: VPC の作成の前提条件の手順で設定した、このクラスタの AWS VPC の IDCONTROL_PLANE_SUBNET_1
、CONTROL_PLANE_SUBNET_2
、CONTROL_PLANE_SUBNET_3
: プライベート サブネットの作成の前提条件の手順で作成した、クラスタの 3 つのコントロール プレーン インスタンスのサブネット IDPOD_CIDR_BLOCK
: クラスタの Pod の CIDR アドレス範囲SERVICE_CIDR_BLOCK
: クラスタの Service の CIDR アドレス範囲API_ROLE_ARN
: GKE Multi-Cloud API ロールの作成の前提条件の手順で作成した、GKE Multi-Cloud サービスの IAM ロールの ARNCONTROL_PLANE_PROFILE
: コントロール プレーン ロールの作成の前提条件の手順で選択した、クラスタに関連付けられた IAM インスタンスのプロファイル名DB_KMS_KEY_ARN
: AWS KMS 鍵の作成の前提条件の手順で作成した、AWS KMS 鍵の 1 つの Amazon リソース名(ARN)CONFIG_KMS_KEY_ARN
: AWS KMS 鍵の作成の前提条件の手順で作成した、AWS KMS 鍵の他の Amazon リソース名(ARN)
存在する場合、--tags
パラメータは、指定された AWS タグを GKE on AWS によって管理されるすべての基盤となる AWS リソースに適用します。この例では、コントロール プレーン ノードに、そのクラスタが属するクラスタの名前でタグを付けます。
ノードプールを作成する
ノードプールは、次のコマンドを使用して作成します。
gcloud container aws node-pools create pool-0 \
--cluster aws-cluster-0 \
--node-version 1.29.4-gke.200 \
--min-nodes 1 \
--max-nodes 5 \
--max-pods-per-node 110 \
--root-volume-size 50 \
--subnet-id NODEPOOL_SUBNET_ID \
--iam-instance-profile NODEPOOL_PROFILE \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--ssh-ec2-key-pair EC2_KEY_PAIR \
--tags "google:gkemulticloud:cluster=aws-cluster-0"
次のように置き換えます。
NODEPOOL_SUBNET_ID
: プライベート サブネットの作成の前提条件の手順で作成した、プライベート サブネットの 1 つの IDNODEPOOL_PROFILE
: ノードプールの IAM ロールの作成の前提条件の手順で選択した、ノードプール内の EC2 インスタンスの IAM インスタンス プロファイル名CONFIG_KMS_KEY_ARN
: ユーザーデータの暗号化に使用される AWS KMS 鍵の Amazon Resource Name(ARN)EC2_KEY_PAIR
(省略可): SSH 認証鍵ペアの作成の前提条件の手順で作成した、SSH アクセス(省略可)用に作成した EC2 鍵ペアの名前
クラスタのステータスを表示する
クラスタとノードプールを作成した後に、Google Cloud CLI または Google Cloud コンソールでクラスタのステータスを確認できます。クラスタのステータスを表示するには、Google Cloud CLI と Google Cloud コンソールのどちらを使用するかを選択して、次の操作を行います。
gcloud
クラスタの詳細を取得するには、gcloud container aws clusters describe
コマンドを使用します。
gcloud container aws clusters describe CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前GOOGLE_CLOUD_LOCATION
: クラスタを管理する Google Cloud のロケーション名
Google Cloud コンソール
Google Cloud コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。
クラスタは名前とロケーションごとに一覧表示されます。
クラスタの名前をクリックします。クラスタの状態や有効な機能など、クラスタの情報を表示するパネルが表示されます。
クラスタの認証情報を取得する
クラスタの作成が完了したら、そのクラスタとやり取りするために必要な認証情報を取得します。
gcloud container aws clusters get-credentials aws-cluster-0
このコマンドは、Connect ゲートウェイ を使用して作成したクラスタにアクセスするように kubectl
を構成します。Connect ゲートウェイを使用するには、少なくとも 1 つのノードプールが必要です。このノードプールが、クラスタ内の Deployment として実行される Connect エージェントに依存しているためです。
アプリケーションをクラスタにデプロイする
作成したクラスタに、コンテナ化されたアプリケーションをデプロイします。このクイックスタートでは、サンプルとして用意されている hello-app
というウェブ アプリケーションをデプロイできます。
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
フラグを渡すことで、コンテナに AWS ロードバランサが作成されます。--port
フラグを指定すると、インターネット用に公開ポート 80 が初期化されます。--target-port
フラグを使用すると、アプリケーションのポート 8080 にトラフィックがルーティングされます。
ロードバランサは、AWS ロードバランサの料金に従って課金されます。
アプリケーションを検査して表示する
実行中の Pod を検査するには、
kubectl get pods
を使用します。kubectl get pods
クラスタで 1 つの
hello-server
Pod が実行されているはずです。hello-server
Service を検査するには、kubectl get service
を使用します。kubectl get service hello-server
このコマンドの出力で、
EXTERNAL-IP
列から Service の外部 IP アドレスをコピーします。外部 IP と公開ポートを指定して、ウェブブラウザでアプリケーションを表示します。
http://EXTERNAL-IP
これで、コンテナ化されたウェブ アプリケーションが GKE on AWS にデプロイされました。
クリーンアップ
アプリケーションの Service と Deployment を削除します。
kubectl delete service hello-server kubectl delete deployment hello-server
gcloud container aws node-pools delete
を実行して、ノードプールを削除します。gcloud container aws node-pools delete pool-0 --cluster aws-cluster-0
gcloud container aws clusters delete
を実行して、クラスタを削除します。gcloud container aws clusters delete aws-cluster-0