GKE on Azure にアプリケーションをデプロイする
このページでは、クラスタとノードプールを作成し、GKE on Azure を使用してサンプル アプリケーションをデプロイする方法について説明します。
Terraform のサポート
Terraform に精通されている場合は、GitHub で利用可能な Terraform スクリプトを使用して前提条件を自動化し、クラスタを作成できます。
始める前に
クラスタを作成する前に、前提条件をすべて行う必要があります。特に、次のリソースを用意する必要があります。
- クラスタが実行される Azure 仮想ネットワーク。
- Kubernetes コントロール プレーン レプリカ用のサブネット。
- GKE on Azure でサービス プリンシパルを使用して Azure 環境にアクセスできるようにする Azure ロールの割り当て。
- GKE on Azure で Azure サービスの認証と Azure アカウントのリソース管理に使用する AzureClient リソース。
- クラスタ内の Azure 仮想マシンにアクセスするための SSH 認証鍵ペア。
これらのリソースは、お客様の責任で作成して管理する必要があります。これらのリソースは、すべてのクラスタ間で共有できます。クラスタの基盤となるすべての Azure リソースは、GKE on Azure によって管理されます。
gcloud CLI のデフォルトの設定を構成する
gcloud CLI を使用して、デフォルトのプロジェクトと Google Cloud リージョンのデフォルト設定を構成します。
プロジェクトには固有の識別子としてプロジェクト ID があります。プロジェクトを作成するときに、自動的に生成されるプロジェクト ID を使用することも、独自のプロジェクト ID を作成することもできます。
Google Cloud リージョンは、クラスタが管理される場所です。例: us-west1
詳細については、管理リージョンをご覧ください。
こうしたデフォルト設定を構成すると、Google Cloud CLI を実行するときに指定する必要がありません。--project
フラグと --location
フラグを Google Cloud CLI に渡すことで、設定を指定したり、デフォルト設定をオーバーライドしたりできます。
デフォルトのプロジェクトとロケーションを構成した後に GKE on Azure のリソースを作成する場合、そのプロジェクトとロケーションにリソースが自動的に作成されます。
デフォルトを設定する際の手順は次のとおりです。
デフォルト プロジェクトを設定します。
gcloud config set project PROJECT_ID
PROJECT_ID
を実際のプロジェクト ID に置き換えます。デフォルトの管理ロケーションを設定します。
gcloud config set container_azure/location GOOGLE_CLOUD_LOCATION
GOOGLE_CLOUD_LOCATION
は、ロケーション(us-west1
など)に置き換えます。
クラスタの Azure リソース ID を選択
リソース グループ ID を選択する
次のコマンドを実行して、クラスタのリソース グループを環境変数に保存します。
CLUSTER_RESOURCE_GROUP_ID=$(az group show --query id --output tsv \
--resource-group=CLUSTER_RESOURCE_GROUP_NAME)
CLUSTER_RESOURCE_GROUP_NAME
は、Azure リソース グループの作成の前提条件の手順で設定したクラスタ リソースをプロビジョニングするリソース グループの名前に置き換えます。
仮想ネットワーク ID を選択
次のコマンドを実行して、クラスタの VNet ID を環境変数に保存します。
VNET_ID=$(az network vnet show --query id --output tsv \
--resource-group=VNET_RESOURCE_GROUP_NAME \
--name=VNET_NAME)
以下を置き換えます。
VNET_RESOURCE_GROUP_NAME
は、Azure 仮想ネットワークを作成するの前提条件の手順で設定した、仮想ネットワークを含むリソース グループの名前に置き換えます。VNET_NAME
は、Azure 仮想ネットワークを作成するの前提条件の手順で設定した、仮想ネットワークの名前に置き換えます。
サブネット ID を選択
次のコマンドを実行して、クラスタのサブネット ID を環境変数に保存します。
SUBNET_ID=$(az network vnet subnet show --query id --output tsv \
--resource-group VNET_RESOURCE_GROUP_NAME \
--vnet-name VNET_NAME \
--name SUBNET_NAME)
次のように置き換えます。
VNET_RESOURCE_GROUP_NAME
は、仮想ネットワークを含む既存のリソース グループ名に置き換えます。これは、Azure 仮想ネットワークを作成するで設定したリソース グループの名前になります。VNET_NAME
は、仮想ネットワークの名前に置き換えます。これは、Azure 仮想ネットワークを作成するで設定した仮想ネットワークの名前になります。SUBNET_NAME
は、サブネットの名前に置き換えます(例:default
)。
クラスタの 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 Azure でクラスタを作成するには、次のコマンドを使用します。
gcloud container azure clusters create azure-cluster-0 \
--cluster-version 1.28.7-gke.1700 \
--azure-region AZURE_REGION \
--fleet-project FLEET_PROJECT_ID \
--client CLIENT_NAME \
--resource-group-id $CLUSTER_RESOURCE_GROUP_ID \
--vnet-id $VNET_ID \
--subnet-id $SUBNET_ID \
--pod-address-cidr-blocks POD_CIDR_BLOCK \
--service-address-cidr-blocks SERVICE_CIDR_BLOCK \
--ssh-public-key "SSH_PUBLIC_KEY" \
--tags "google:gkemulticloud:cluster=azure-cluster-0"
次のように置き換えます。
AZURE_REGION
: Google Cloud リージョンに関連付けられたサポート対象の Azure リージョン。FLEET_PROJECT_ID
は、クラスタを登録する フリート ホスト プロジェクトに置き換えます。CLIENT_NAME
: AzureClientの名前。POD_CIDR_BLOCK
: クラスタの Pod アドレス範囲。SERVICE_CIDR_BLOCK
: クラスタのサービス アドレス範囲。SSH_PUBLIC_KEY
は、SSH 認証鍵ペアを作成するの前提条件の手順で作成した SSH 公開鍵のテキストに置き換えます。このステップで公開鍵を環境変数に保存した場合は、${SSH_PUBLIC_KEY}
を使用できます。
詳細とオプション パラメータについては、gcloud container azure clusters create のリファレンス ページをご覧ください。
ノードプールの作成
Google Cloud CLI を使用してノードプールを作成します。
gcloud container azure node-pools create pool-0 \
--cluster azure-cluster-0 \
--node-version 1.28.7-gke.1700 \
--vm-size Standard_B2s \
--max-pods-per-node 110 \
--min-nodes 1 \
--max-nodes 5 \
--ssh-public-key "SSH_PUBLIC_KEY" \
--subnet-id $SUBNET_ID \
--tags "google:gkemulticloud:cluster=azure-cluster-0"
SSH_PUBLIC_KEY
は、SSH 認証鍵ペアを作成するの前提条件の手順で作成された SSH 公開鍵のテキストに置き換えます。公開鍵を環境変数に保存している場合は、${SSH_PUBLIC_KEY}
を使用できます。
クラスタのステータスを表示する
クラスタとノードプールを作成した後に、Google Cloud CLI または Google Cloud コンソールでクラスタのステータスを表示できます。クラスタのステータスを表示するには、Google Cloud CLI と Google Cloud コンソールのどちらを使用するかを選択して、次の手順を行います。
gcloud
クラスタの詳細を取得するには、gcloud container azure clusters describe
コマンドを使用します。
gcloud container azure clusters describe CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION
以下を置き換えます。
CLUSTER_NAME
: クラスタの名前GOOGLE_CLOUD_LOCATION
: クラスタを管理する Google Cloud のロケーション名
Google Cloud コンソール
Google Cloud コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。
クラスタは名前とロケーションで一覧表示されます。
クラスタの名前をクリックします。クラスタの状態や有効な 有効な機能など、クラスタの情報を表示するパネルが表示されます。
クラスタの認証情報を取得する
クラスタの作成が完了したら、そのクラスタとやり取りするために必要な認証情報を取得します。
gcloud container azure clusters get-credentials azure-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
フラグを渡すことで、コンテナに Azure ロードバランサが作成されます。--port
フラグを指定すると、インターネット用に公開ポート 80 が初期化されます。--target-port
フラグを使用すると、アプリケーションのポート 8080 にトラフィックがルーティングされます。
ロードバランサは、Azure ロードバランサの料金に従って課金されます。
アプリケーションを検査して表示する
実行中の Pod を検査するには、
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 on Azure にデプロイされました。
クリーンアップ
アプリケーションの Service と Deployment を削除します。
kubectl delete service hello-server kubectl delete deployment hello-server
gcloud container azure node-pools delete
を実行して、ノードプールを削除します。gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
gcloud container azure clusters delete
を実行して、クラスタを削除します。gcloud container azure clusters delete azure-cluster-0