你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Kubernetes 服务 (AKS) 是可用于快速部署和管理群集的托管式 Kubernetes 服务。 在本文中,你将使用 Azure CLI 部署运行 Windows Server 容器的 AKS 群集。 还可将 Windows Server 容器中的 ASP.NET 示例应用程序部署到群集。
注意
为了开始快速预配 AKS 群集,本文介绍了仅针对评估目的部署具有默认设置的群集的步骤。 在部署生产就绪群集之前,建议熟悉我们的基线参考体系结构,考虑它如何与你的业务需求保持一致。
开始之前
本快速入门假设读者基本了解 Kubernetes 的概念。 有关详细信息,请参阅 Azure Kubernetes 服务 (AKS) 的 Kubernetes 核心概念。
- 如果没有 Azure 帐户,请在开始前创建一个免费帐户。
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅 使用 Azure CLI 向 Azure 进行身份验证。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 使用和管理 Azure CLI 中的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
- 本文需要 Azure CLI 版本 2.0.64 或更高版本。 如果你使用的是 Azure Cloud Shell,则表示已安装最新版本。
- 确保用于创建群集的标识具有合适的的最低权限。 有关 AKS 访问和标识的详细信息,请参阅 Azure Kubernetes Service (AKS) 的访问和标识选项。
- 如果你有多个 Azure 订阅,请使用
az account set命令选择应在其中计收资源费用的相应订阅 ID。 有关详细信息,请参阅如何管理 Azure 订阅 - Azure CLI。 - 如果使用
--os-sku Windows2025,则需要安装aks-preview扩展并注册预览标志。 最低版本为 18.0.0b40。
aks-preview安装扩展
重要
AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
- 使用
aks-preview命令安装az extension addAzure CLI 扩展。
az extension add --name aks-preview
- 使用
az extension update命令更新到扩展的最新版本。 Windows Server 2025 至少需要 18.0.0b40。
az extension update --name aks-preview
注册 AksWindows2025Preview 功能标志
- 使用 [
AksWindows2025Preview][az-feature-register] 命令注册az feature register功能标志。
az feature register --name AksWindows2025Preview --namespace Microsoft.ContainerService
- 使用 [
az feature show][az-feature-show] 命令验证注册状态。 几分钟后,状态将显示为“已注册”。
az feature show --name AksWindows2025Preview --namespace Microsoft.ContainerService
当状态反映为“已注册”时,请使用 [][az-provider-register] 命令刷新 Microsoft.ContainerService 资源提供程序的注册
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 群集:
创建用户名,用作群集上 Windows Server 节点的管理员凭据。
export WINDOWS_USERNAME="winadmin"为你在上一步中创建的管理员用户名创建密码。 密码必须至少为 14 个字符,并且满足 Windows Server 密码复杂性要求。
export WINDOWS_PASSWORD=$(echo "P@ssw0rd$(openssl rand -base64 10 | tr -dc 'A-Za-z0-9!@#$%^&*()' | cut -c1-6)")使用
az aks create命令创建群集并指定--windows-admin-username和--windows-admin-password参数。 以下示例命令使用您在前面命令中设定的WINDOWS_USERNAME和WINDOWS_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 常见问题解答。
无法更改管理员用户名,但可以更改 AKS 群集用于 Windows Server 节点的
az aks update管理员密码。 有关详细信息,请参阅 Windows Server 常见问题解答。若要运行支持 Windows Server 容器的节点池的 AKS 群集,群集需要采用使用 Azure CNI(高级)网络插件的网络策略。
--network-plugin azure参数指定 Azure CNI。
添加节点池
默认情况下,所有 AKS 群集都是使用可以运行 Linux 容器的节点池创建的。 必须添加一个 Windows 节点池,该池可与 Linux 节点池一起运行 Windows Server 容器。 若要检查群集中是否有 Windows 节点池,可以使用命令查看群集 kubectl get nodes -o wide 上的节点。
若要创建 Windows 节点池,需要指定受支持的 OsType 和 OsSku。 使用下表中的信息来确定哪个适用于群集:
OsType |
OsSku |
违约 | 支持的 K8s 版本 | 详细信息 |
|---|---|---|---|---|
windows |
Windows2025 |
目前采用预览版。 不是默认值。 | 1.32+ | 更新的默认值:containerd 2.0,第 2 代镜像默认使用。 |
windows |
Windows2022 |
K8s 1.25-1.34 中的默认值 | K8s 1.35+ 中不可用 | 2027 年 3 月退休。 更新的默认值:默认情况下启用 FIPS。 |
windows |
Windows2019 |
K8s 1.24 及更低版本中的默认值 | K8s 1.32+ 中不可用 | 2026 年 3 月退休。 |
Windows Server 2022 是 Kubernetes 版本 1.25-1.34 的默认作系统。 Windows Server 2019 是早期版本的默认操作系统。 如果未指定特定的 OS SKU,Azure 将使用群集使用的 Kubernetes 版本的默认 SKU 创建新的节点池。
注意
- 在 Kubernetes 版本 1.34 终止支持后,Windows Server 2022 停用,Kubernetes 版本 1.35 及更高版本不支持。
- 在 Kubernetes 版本 1.32 终止支持后,Windows Server 2019 停用,Kubernetes 版本 1.33 及更高版本不支持。
有关详细信息,请参阅 AKS 发行说明。 若要了解最新的 Windows Server 操作系统版本,并了解有关 AKS 上计划支持的路线图的详细信息,请参阅我们的 AKS 公共路线图。
使用
az aks nodepool add命令,并指定OsType和OsSku,以添加 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 命令行客户端 kubectl 来管理 Kubernetes 群集。 如果使用的是 Azure Cloud Shell,则 kubectl 已安装。 如果要在本地安装和运行 kubectl ,请使用 az aks install-cli 命令。
使用
kubectl命令将az aks get-credentials配置为连接到你的 Kubernetes 群集。 此命令将下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER使用
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 部署,以及用于从 Internet 访问应用程序的外部 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 服务将向 Internet 公开应用程序前端。 此过程可能需要几分钟才能完成。 有时,服务预配的时间可能超过几分钟。 最多允许 10 分钟进行预配。
使用
kubectl get pods命令查看已部署的 Pod 的状态。 在继续操作之前,请确保所有 Pod 的状态为Running。kubectl get pods使用带有
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当 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" }几分钟后,打开 Web 浏览器,并输入你的服务的外部 IP 地址,查看示例应用的运行效果。
后续步骤
在本快速入门中,你部署了 Kubernetes 群集,然后在该群集的 Windows Server 容器中部署了一个 ASP.NET 示例应用程序。 此示例应用程序仅用于演示目的,并未展示出 Kubernetes 应用程序的所有最佳做法。 有关使用生产版 AKS 创建完整解决方案的指南,请参阅 AKS 解决方案指南。
若要详细了解 AKS 并演练一个从编码到部署的完整示例,请继续阅读 Kubernetes 群集教程。