共用方式為


使用 Azure CLI 在 Azure Kubernetes Service (AKS) 叢集上部署 Windows Server 容器

Azure Kubernetes Service (AKS) 是受控 Kubernetes 服務,可讓您快速部署及管理叢集。 在本文中,您會使用 Azure CLI 來部署可執行 Windows Server 容器的 AKS 叢集。 您也可以將 Windows Server 容器中的 ASP.NET 範例應用程式部署到叢集。

附註

若要開始快速佈建 AKS 叢集,本文包含僅針對評估目的部署具有預設設定值之叢集的步驟。 在部署生產就緒叢集之前,建議您先熟悉我們的基準參考架構,考慮其如何符合您的業務需求。

開始之前

本快速入門假設您已有 Kubernetes 概念的基本知識。 如需詳細資訊,請參閱 Azure Kubernetes Services (AKS) 的 Kubernetes 核心概念

  • 如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶
  • 本文需要 2.0.64 版或更新版本的 Azure CLI。 若您使用的是 Azure Cloud Shell,即已安裝最新版本。
  • 請確保您用來建立叢集的身分識別擁有適當的最低權限。 如需 AKS 存取和身分識別的詳細資訊,請參閱 Azure Kubernetes Service (AKS) 的存取與身分識別選項
  • 如果您有多個 Azure 訂用帳戶,則請使用 az account set 命令選取應該從中針對資源計費的適當訂用帳戶識別碼。 如需詳細資訊,請參閱 如何管理 Azure 訂用帳戶 – Azure CLI
  • 如果您使用 --os-sku Windows2025,則需要安裝 aks-preview 擴充功能並註冊預覽旗標。 最低版本為 18.0.0b40。

安裝 aks-preview 擴充功能

這很重要

AKS 預覽功能可透過自助服務,以加入方式使用。 預覽是「依現況」及「可用時」提供的,並不包括在服務等級協定和有限保固之內。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:

  1. 使用 aks-preview 命令安裝 az extension add Azure CLI 擴充功能。
az extension add --name aks-preview
  1. 使用 az extension update 命令,更新為最新版的延伸模組。 Windows Server 2025 至少需要 18.0.0b40
az extension update --name aks-preview

註冊 AksWindows2025Preview 功能旗標

  1. 使用 [AksWindows2025Preview][az-feature-register] 命令註冊 az feature register 功能旗標。
az feature register --name AksWindows2025Preview --namespace Microsoft.ContainerService
  1. 使用 [az feature show][az-feature-show] 命令確認註冊狀態。 狀態需要幾分鐘的時間才會顯示「已註冊」
az feature show --name AksWindows2025Preview --namespace Microsoft.ContainerService
  1. 當狀態反映已註冊時,請使用 [][az-provider-register] 命令重新整理 az provider register 資源提供者的註冊。

    az provider register --namespace Microsoft.ContainerService
    

建立資源群組

Azure 資源群組是部署及管理 Azure 資源所在的邏輯群組。 建立資源群組時,系統會要求您指定位置。 此位置是儲存資源群組中繼資料的位置,如果您未在資源建立期間指定另一個區域,此位置也會是您在 Azure 中執行資源的位置。

  • 使用 az group create 命令建立資源群組。 下列範例會在 WestUS2 位置建立名為 myResourceGroup 的資源群組。

    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export REGION="canadacentral"
    export MY_RESOURCE_GROUP_NAME="myAKSResourceGroup$RANDOM_SUFFIX"
    az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
    

    結果:

    {
      "id": "/subscriptions/xxxxx-xxxxx-xxxxx-xxxxx/resourceGroups/myResourceGroupxxxxx",
      "location": "WestUS2",
      "managedBy": null,
      "name": "myResourceGroupxxxxx",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null,
      "type": "Microsoft.Resources/resourceGroups"
    }
    

建立 AKS 叢集

在本節中,我們會使用下列組態建立 AKS 叢集:

  • 叢集已設定為兩個節點,以確保其能夠可靠地運作。 節點是可執行 Kubernetes 節點元件和容器執行階段的 Azure 虛擬機器 (VM)。
  • --windows-admin-password--windows-admin-username 參數會為叢集上的任何 Windows Server 節點設定管理員認證,而且必須符合 Windows Server 密碼需求
  • 節點集區會使用 VirtualMachineScaleSets

使用下列步驟來使用 Azure CLI 建立 AKS 叢集:

  1. 建立使用者名稱,以做為叢集上 Windows Server 節點的管理員認證。

    export WINDOWS_USERNAME="winadmin"
    
  2. 為您在上一個步驟中建立的系統管理員使用者名稱建立密碼。 密碼必須至少為 14 個字元,且符合 Windows Server 密碼複雜度需求

    export WINDOWS_PASSWORD=$(echo "P@ssw0rd$(openssl rand -base64 10 | tr -dc 'A-Za-z0-9!@#$%^&*()' | cut -c1-6)")
    
  3. 使用命令建立 az aks create 叢集,並指定 --windows-admin-username--windows-admin-password 參數。 下列範例命令會使用您在先前命令中設定的值WINDOWS_USERNAMEWINDOWS_PASSWORD來建立叢集。 隨機後綴會附加至叢集名稱,以取得唯一性。

    export MY_AKS_CLUSTER="myAKSCluster$RANDOM_SUFFIX"
    az aks create \
        --resource-group $MY_RESOURCE_GROUP_NAME \
        --name $MY_AKS_CLUSTER \
        --node-count 2 \
        --enable-addons monitoring \
        --generate-ssh-keys \
        --windows-admin-username $WINDOWS_USERNAME \
        --windows-admin-password $WINDOWS_PASSWORD \
        --vm-set-type VirtualMachineScaleSets \
        --network-plugin azure
    

    幾分鐘後,命令會完成並傳回關於叢集的 JSON 格式資訊。 有時候,叢集可能需要多於幾分鐘的時間來完成配置。 佈建最多需要 10 分鐘。

    如果您收到密碼驗證錯誤,且您設定的密碼符合長度和複雜度需求,請嘗試在另一個區域中建立您的資源群組。 然後嘗試使用新的資源群組建立叢集。

    如果您在建立節點集區時未指定管理員使用者名稱和密碼,則使用者名稱會設為 azureuser,並將密碼設定為隨機值。 如需詳細資訊,請參閱 Windows Server 常見問題

    您無法變更系統管理員使用者名稱,但可以使用az aks update更改 AKS 叢集之 Windows Server 節點的系統管理員密碼。 如需詳細資訊,請參閱 Windows Server 常見問題

    若要執行支援 Windows Server 容器之節點集區的 AKS 叢集,您的叢集必須採用使用 Azure CNI (advanced) 網路外掛程式的網路原則。 --network-plugin azure 參數指定 Azure CNI。

新增節點集區

根據預設,所有 AKS 叢集都會使用可執行 Linux 容器的節點集區來建立。 您必須新增 Windows 節點集區,以與 Linux 節點集區一起執行 Windows Server 容器。 若要檢查叢集中是否有 Windows 節點集區,您可以使用命令 kubectl get nodes -o wide 檢視叢集上的節點。

若要建立 Windows 節點集區,您必須指定支援的 OsTypeOsSku。 使用下表中的資訊來判斷哪個適合您的叢集:

OsType OsSku 預設 支援的 K8s 版本 詳細資訊
windows Windows2025 目前為預覽版。 不是預設值。 1.32+ 更新預設值:containerd 2.0,預設使用第 2 代映像。
windows Windows2022 在 K8s 1.25-1.35 為預設值 K8s 1.36+ 中沒有 2027 年 3 月退休。 更新的預設值:預設會啟用 FIPS。
windows Windows2019 K8s 1.24 及以下版本中的預設值 K8s 1.33+ 中沒有 將於 2026 年 3 月退休。

Windows Server 2022 是 Kubernetes 1.25 至 1.35 版本的預設作業系統。 Windows Server 2019 是舊版的預設作業系統。 如果您未指定特定的 OS SKU,Azure 會使用叢集所使用 Kubernetes 版本的預設 SKU 來建立新的節點集區。

附註

  • Windows Server 2019 將於 2026 年 3 月 1 日正式退休。 在此日期之後,AKS 將不再產生新的節點映像檔或提供安全修補程式。 超過該日期後,你將無法在任何 Kubernetes 版本的 Windows Server 2019 上建立新的節點池。 所有現有的 Windows Server 2019 節點池將不再支援。 Windows Server 2019 在 Kubernetes 1.33 及以上版本中不支援。 自 2027 年 4 月 1 日起,AKS 將移除所有現有的 Windows Server 2019 節點映像檔,意味著擴展操作將失敗。
  • Windows Server 2022 將於 2027 年 3 月 15 日正式退休。 在此日期之後,AKS 將不再產生新的節點映像檔或提供安全修補程式。 超過那個日期後,你將無法在任何 Kubernetes 版本的 Windows Server 2022 上建立新的節點池。 所有現有的 Windows Server 2022 節點池將不再支援。 Windows Server 2022 在 Kubernetes 1.36 及以上版本中不支援。 自 2028 年 4 月 1 日起,AKS 將移除所有現有的 Windows Server 2022 節點映像,意味著縮放操作將失敗。

如需詳細資訊,請參閱 AKS 發行備註。 若要掌握最新的 Windows Server OS 版本,並深入了解我們規劃在 AKS 上所支援項目的藍圖,請參閱我們的 AKS 公用藍圖

  • 使用包含指定 az aks nodepool addOsTypeOsSku 命令來新增 Windows 節點集區。 如果您未指定特定的 OS SKU,Azure 會使用叢集所使用 Kubernetes 版本的預設 SKU 來建立新的節點集區。

    az aks nodepool add \
      --resource-group $MY_RESOURCE_GROUP_NAME \
      --cluster-name $MY_AKS_CLUSTER \
      --os-type Windows \
      --os-sku Windows2022 \
      --name npwin \
      --node-count 1
    

    此命令會建立名為 npwin 的新節點集區,並將它新增至 myAKSCluster。 這個命令也會使用執行 az aks create 時,預設虛擬網路中所建立的預設子網路。

連線至叢集

若要管理 Kubernetes 叢集,請使用 Kubernetes 命令列用戶端:kubectl。 如果您使用 Azure Cloud Shell,則 kubectl 已安裝。 如果您想要在本機安裝和執行 kubectl ,請使用命令 az aks install-cli

  1. 使用 kubectl 命令,設定 az aks get-credentials 連線到 Kubernetes 叢集。 此命令會下載憑證並設定 Kubernetes CLI 以供使用。

    az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER
    
  2. 使用 kubectl get 命令來驗證對您叢集的連線,這會傳回叢集節點清單。

    kubectl get nodes -o wide
    

    下列範例輸出顯示叢集中的所有節點。 請確定全部節點的狀態為就緒

    NAME                                STATUS   ROLES   AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION      CONTAINER-RUNTIME
    aks-nodepool1-20786768-vmss000000   Ready    agent   22h   v1.27.7   10.224.0.4    <none>        Ubuntu 22.04.3 LTS               5.15.0-1052-azure   containerd://1.7.5-1
    aks-nodepool1-20786768-vmss000001   Ready    agent   22h   v1.27.7   10.224.0.33   <none>        Ubuntu 22.04.3 LTS               5.15.0-1052-azure   containerd://1.7.5-1
    aksnpwin000000                      Ready    agent   20h   v1.27.7   10.224.0.62   <none>        Windows Server 2022 Datacenter   10.0.20348.2159     containerd://1.6.21+azure
    

    附註

    每個節點集區的容器執行階段會顯示在 CONTAINER-RUNTIME 下。 容器執行階段值會以 containerd:// 開頭,這表示其針對容器執行階段都是使用 containerd

部署應用程式

Kubernetes 資訊清單檔會定義所需的叢集狀態,例如要執行哪些容器映像。 在本文中,資訊清單可用來建立在 Windows Server 容器中執行 ASP.NET 範例應用程式所需的所有物件。 此資訊清單包含 ASP.NET 範例應用程式的 Kubernetes 部署,以及從網際網路存取應用程式的外部 Kubernetes 服務

ASP.NET 範例應用程式是 .NET Framework 範例中提供的一部份,並且可在 Windows Server 容器中執行。 AKS 需要 Windows Server 容器根據 Windows Server 2019 或更新版本的映像。 Kubernetes 資訊清單檔也必須定義節點選取器以指示您的 AKS 叢集在可執行 Windows Server 容器的節點上執行 ASP.NET 範例應用程式的 Pod。

  1. 在下列 YAML 定義中建立名為並複製的 sample.yaml 檔案:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sample
      labels:
        app: sample
    spec:
      replicas: 1
      template:
        metadata:
          name: sample
          labels:
            app: sample
        spec:
          nodeSelector:
            "kubernetes.io/os": windows
          containers:
          - name: sample
            image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp
            resources:
              limits:
                cpu: 1
                memory: 800M
            ports:
              - containerPort: 80
      selector:
        matchLabels:
          app: sample
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sample
    spec:
      type: LoadBalancer
      ports:
      - protocol: TCP
        port: 80
      selector:
        app: sample
    

    如需 YAML 資訊清單檔案的詳細資訊,請參閱部署和 YAML 資訊清單

    如果您在本地建立並儲存 YAML 檔案,則可以選取上傳/下載檔案按鈕,然後從本地文件系統選取檔案,將資訊清單檔上傳至 CloudShell 裡的預設目錄。

  2. 使用 kubectl apply 命令來部署應用程式,並指定 YAML 資訊清單的名稱。

    kubectl apply -f sample.yaml
    

    下列範例輸出顯示成功建立的部署和服務:

    {
      "deployment.apps/sample": "created",
      "service/sample": "created"
    }
    

測試應用程式

當應用程式執行時,Kubernetes 服務會將應用程式前端公開至網際網路。 此程序可能需要幾分鐘才能完成。 服務有時可能需要超過幾分鐘的時間來佈建。 佈建最多需要 10 分鐘。

  1. 使用 kubectl get pods 命令檢視已部署 Pod 的狀態。 請先確認全部 Pod 都是 Running 後再繼續進行。

    kubectl get pods
    
  2. 使用 kubectl get service 命令搭配 --watch 引數來監視進度。

    while true; do
      export EXTERNAL_IP=$(kubectl get service sample -o jsonpath="{.status.loadBalancer.ingress[0].ip}" 2>/dev/null)
      if [[ -n "$EXTERNAL_IP" && "$EXTERNAL_IP" != "<pending>" ]]; then
        kubectl get service sample
        break
      fi
      echo "Still waiting for external IP assignment..."
      sleep 5
    done
    

    一開始,輸出顯示範例服務的 EXTERNAL-IP待定

    NAME     TYPE           CLUSTER-IP     EXTERNAL-IP       PORT(S)        AGE
    sample   LoadBalancer   xx.xx.xx.xx    pending          xx:xxxx/TCP     2m
    
  3. EXTERNAL-IP 位址從 pending 變成實際的公用 IP 位址時,請使用 CTRL-C 停止 kubectl 監看式流程。

    下列範例輸出顯示指派給服務的有效公用 IP 位址:

    {
      "NAME": "sample",
      "TYPE": "LoadBalancer",
      "CLUSTER-IP": "10.0.37.27",
      "EXTERNAL-IP": "52.179.23.131",
      "PORT(S)": "80:30572/TCP",
      "AGE": "2m"
    }
    
  4. 在幾分鐘后,開啟網頁瀏覽器至服務的外部IP位址,以查看作用中的範例應用程式。

    瀏覽至 ASP.NET 範例應用程式的螢幕擷取畫面。

下一步

在本快速入門中,您已部署 Kubernetes 叢集,並在 Windows Server 容器中,將 ASP.NET 範例應用程式部署至該叢集。 這個範例應用程式僅供示範之用,並不代表 Kubernetes 應用程式的所有最佳做法。 如需針對生產使用 AKS 建立完整解決方案的指引,請參閱 AKS 解決方案指引

若要深入了解 AKS,並逐步完成部署範例的完整程式碼,請繼續 Kubernetes 叢集教學課程。