在 Azure 上的 GKE 中部署應用程式
本頁說明如何建立叢集和節點集區,然後使用 GKE on Azure 部署範例應用程式。
Terraform 支援
如果您熟悉 Terraform,可以使用 GitHub 提供的 Terraform 指令碼,自動完成必要條件並建立叢集。
事前準備
建立叢集前,請先完成必要條件。具體來說,您必須提供下列資源:
- 叢集將在其中執行的 Azure 虛擬網路。
- Kubernetes 控制層副本的子網路。
- Azure 角色指派作業,可透過服務主體授予 GKE on Azure 存取 Azure 環境的權限。
- AzureClient 資源,Azure 中的 GKE 會使用這項資源向 Azure 服務進行驗證,並管理 Azure 帳戶中的資源。
- 用於存取叢集中 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 需要為叢集提供兩個 CIDR 範圍。請選擇這些 CIDR 範圍,確保不會與 VPC 子網路使用的 CIDR 範圍重疊。這些範圍應足以容納叢集的最大預期大小。
Pod 位址 CIDR 範圍:建立新的
Pod
時,系統會從這個範圍分配 IP 位址。範例範圍:192.168.208.0/20服務位址 CIDR 範圍:建立新服務時,系統會從這個範圍分配 IP 位址。範例範圍:192.168.224.0/20
建立叢集
使用下列指令在 Azure 上的 GKE 下建立叢集。
gcloud container azure clusters create azure-cluster-0 \
--cluster-version 1.31.6-gke.200 \
--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
,並將其替換為要註冊叢集的機群主專案 ID。CLIENT_NAME
:您的 AzureClient 名稱。POD_CIDR_BLOCK
:叢集的 Pod 位址範圍SERVICE_CIDR_BLOCK
:叢集的服務位址範圍SSH_PUBLIC_KEY
,並在建立安全殼層金鑰組的必要步驟中建立安全殼層公開金鑰。如果您在該步驟中將公開金鑰儲存至環境變數,可以使用${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.31.6-gke.200 \
--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 clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。
叢集會依名稱和位置列出。
按一下叢集名稱。系統會顯示面板,提供叢集相關資訊,包括狀態和已啟用的功能。
取得叢集的驗證憑證
建立叢集後,您需要取得驗證憑證才能與叢集互動:
gcloud container azure clusters get-credentials azure-cluster-0
這個指令會設定 kubectl
,透過 Connect 閘道存取您建立的叢集。您至少需要一個節點集區才能使用 Connect 閘道,因為這項功能依賴 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
會指示要提取的特定映像檔版本。如未指定版本,系統會使用標記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 負載平衡器定價計費。
檢查及查看應用程式
使用
kubectl get pods
檢查執行中的 Pod:kubectl get pods
您應該會看到在叢集執行的一個
hello-server
Pod。使用
kubectl get service
檢查hello-server
服務:kubectl get service hello-server
請在上述指令的輸出內容中,複製
EXTERNAL-IP
欄的 Service 外部 IP 位址。在網路瀏覽器上利用外部 IP 位址與公開的通訊埠來查看應用程式:
http://EXTERNAL-IP
您已將容器化網頁應用程式部署到 Azure 上的 GKE。
清除所用資源
刪除應用程式的 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