使用 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 訂用帳戶,請在開始之前先建立 Azure 免費帳戶。
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
- 本文需要 2.0.64 版或更新版本的 Azure CLI。 若您使用的是 Azure Cloud Shell,即已安裝最新版本。
- 請確保您用來建立叢集的身分識別擁有適當的最低權限。 如需 AKS 存取和身分識別的詳細資訊,請參閱 Azure Kubernetes Service (AKS) 的存取與身分識別選項。
- 如果您有多個 Azure 訂用帳戶,請使用 az account set 命令來選取應對資源計費的適當訂用帳戶識別碼。 如需詳細資訊,請參閱 如何管理 Azure 訂用帳戶 – Azure CLI。
建立資源群組
Azure 資源群組是部署及管理 Azure 資源所在的邏輯群組。 建立資源群組時,系統會要求您指定位置。 此位置是儲存資源群組中繼資料的位置,如果您未在資源建立期間指定另一個區域,此位置也會是您在 Azure 中執行資源的位置。
使用 az group create 命令來建立資源群組。 下列範例會在 eastus 位置建立名為 myResourceGroup 的資源群組。 將本文中的此命令和其他命令輸入 BASH 殼層:
az group create --name myResourceGroup --location eastus
下列範例輸出顯示已成功建立的資源群組:
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": null }
建立 AKS 叢集
在本節中,我們會使用下列組態建立 AKS 叢集:
- 叢集已設定為兩個節點,以確保其能夠可靠地運作。 節點是可執行 Kubernetes 節點元件和容器執行階段的 Azure 虛擬機器 (VM)。
--windows-admin-password
和--windows-admin-username
參數會為叢集上的任何 Windows Server 節點設定管理員認證,而且必須符合 Windows Server 密碼需求。- 節點集區會使用
VirtualMachineScaleSets
。
若要使用 Azure CLI 建立 AKS 叢集,請遵循下列步驟:
建立使用者名稱,以做為叢集上 Windows Server 節點的管理員認證。 下列命令會提示您輸入使用者名稱,並將此設定為 WINDOWS_USERNAME,以供稍後的命令使用。
echo "Please enter the username to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_USERNAME
為您在上一個步驟中建立的系統管理員使用者名稱建立密碼。 密碼必須至少為 14 個字元,且符合 Windows Server 密碼複雜度需求。
echo "Please enter the password to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_PASSWORD
使用 az aks create 命令建立叢集,並指定
--windows-admin-username
和--windows-admin-password
參數。 下列範例命令會使用您在上一個命令中設定的 WINDOWS_USERNAME 值來建立叢集。 或者,您也可以直接在參數中提供不同的使用者名稱,而不是使用 WINDOWS_USERNAME。az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --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。
新增節點集區
根據預設,系統會使用可執行 Linux 容器的節點集區來建立 AKS 叢集。 您必須新增可在 Linux 節點集區旁執行 Windows Server 容器的另一個節點集區。
Windows Server 2022 是 Kubernetes 1.25.0 版和更新版本的預設作業系統。 Windows Server 2019 是舊版的預設作業系統。 如果您未指定特定的 OS SKU,Azure 會使用叢集所使用 Kubernetes 版本的預設 SKU 來建立新的節點集區。
若要使用預設的 OS SKU,請建立節點集區,而不指定 OS SKU。 節點集區會根據叢集的 Kube 版本來設定預設作業系統。
使用 az aks nodepool add
命令新增 Windows 節點集區。 下述命令會建立名為 npwin 的新節點集區,並將此新增至 myAKSCluster。 這個命令也會使用執行 az aks create
時,預設虛擬網路中所建立的預設子網路。 未指定 OS SKU,因此節點集區會根據叢集的 Kube 版本設定預設為作業系統:
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--os-type Windows \
--name npwin \
--node-count 1
連線至叢集
若要管理 Kubernetes 叢集,請使用 Kubernetes 命令列用戶端:kubectl。 如果您使用 Azure Cloud Shell,則 kubectl
已安裝。 如果您要在本地安裝及執行 kubectl
,請呼叫 az aks install-cli 命令。
使用 az aks get-credentials 命令,設定
kubectl
連線到 Kubernetes 叢集。 此命令會下載憑證並設定 Kubernetes CLI 以供使用。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
若要驗證對您叢集的連線,請使用 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。
建立名為
sample.yaml
的檔案,然後將下列 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 裡的預設目錄。
使用 kubectl apply 命令來部署應用程式並指定 YAML 資訊清單的名稱。
kubectl apply -f sample.yaml
下列範例輸出會顯示已成功建立的部署和服務:
deployment.apps/sample created service/sample created
測試應用程式
當應用程式執行時,Kubernetes 服務會將應用程式前端公開至網際網路。 此程序可能需要幾分鐘才能完成。 服務有時可能需要超過幾分鐘的時間來佈建。 布建最多需要 10 分鐘。
使用 kubectl get pods 命令署檢視已部署 Pod 的狀態。 讓所有 Pod 都是
Running
,再繼續。kubectl get pods
使用 kubectl get service 命令搭配
--watch
引數來監視進度。kubectl get service sample --watch
一開始,輸出顯示範例服務的 EXTERNAL-IP 為 擱置:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE sample LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
當 EXTERNAL-IP 位址從 pending 變成實際的公用 IP 位址時,請使用
CTRL-C
停止kubectl
監看式流程。 下列範例輸出會顯示已指派給服務的有效公用 IP 位址:sample LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
若要查看範例應用程式的實際運作情況,請開啟網頁瀏覽器並瀏覽至服務的外部 IP 位址。
刪除資源
如果您不打算進行 AKS 教學課程,您應該刪除叢集以避免產生 Azure 費用。
使用 az group delete 命令刪除資源群組、容器服務以及全部相關資源。
az group delete --name myResourceGroup --yes --no-wait
注意
以系統指派的受控識別 (在本快速入門中使用預設身分識別選項) 來建立 AKS 叢集。 Azure 平台會管理此身分識別,因此不需要移除。
下一步
在本快速入門中,您已部署 Kubernetes 叢集,並在 Windows Server 容器中,將 ASP.NET 範例應用程式部署至該叢集。 這個範例應用程式僅供示範之用,並不代表 Kubernetes 應用程式的所有最佳做法。 如需針對生產使用 AKS 建立完整解決方案的指引,請參閱 AKS 解決方案指引。
若要深入了解 AKS,並逐步完成部署範例的完整程式碼,請繼續 Kubernetes 叢集教學課程。