在 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 資源時,自動在該專案和位置中建立資源。

如要設定預設值,請按照下列步驟操作:

  1. 設定預設專案:

    gcloud config set project PROJECT_ID
    

    PROJECT_ID 替換為您的專案 ID。

  2. 設定預設管理位置:

    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)

更改下列內容:

選取子網路 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"

取代:

如需更多資訊和選用參數,請參閱 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 控制台

  1. 在 Google Cloud 控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。

    前往 GKE 叢集

  2. 叢集會依名稱和位置列出。

  3. 按一下叢集名稱。系統會顯示面板,提供叢集相關資訊,包括狀態和已啟用的功能。

取得叢集的驗證憑證

建立叢集後,您需要取得驗證憑證才能與叢集互動:

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 負載平衡器定價計費。

檢查及查看應用程式

  1. 使用 kubectl get pods 檢查執行中的 Pod:

    kubectl get pods
    

    您應該會看到在叢集執行的一個 hello-server Pod。

  2. 使用 kubectl get service 檢查 hello-server 服務:

    kubectl get service hello-server
    

    請在上述指令的輸出內容中,複製 EXTERNAL-IP 欄的 Service 外部 IP 位址。

  3. 在網路瀏覽器上利用外部 IP 位址與公開的通訊埠來查看應用程式:

    http://EXTERNAL-IP
    

您已將容器化網頁應用程式部署到 Azure 上的 GKE。

清除所用資源

  1. 刪除應用程式的 Service 和 Deployment:

    kubectl delete service hello-server
    kubectl delete deployment hello-server
    
  2. 執行 gcloud container azure node-pools delete,刪除節點集區:

    gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
    
  3. 執行 gcloud container azure clusters delete 以刪除叢集:

    gcloud container azure clusters delete azure-cluster-0
    

後續步驟