适用于:Azure Local 上的 AKS
本文介绍如何使用 Azure CLI 将 Windows 节点池部署到现有 AKS 群集,以便运行 Windows Server 容器。 本文还介绍了如何将 Windows Server 容器中的示例 ASP.NET 应用程序部署到群集。
先决条件
按照 “如何创建 AKS 群集”中的说明创建 AKS 群集。
重要
必须使用 Windows Server 订阅或 Azure 混合权益来为 Windows Server 节点池授权,如 在 Azure 本地激活 Windows Server VMs 中所描述。
添加 Windows 节点池
默认情况下,将使用可运行 Linux 容器的节点池创建 Kubernetes 群集。 从 Azure 本地 2509 版本开始,Windows 节点池功能默认处于禁用状态。 必须先启用 Windows 节点池功能,然后才能创建 Windows 节点池。 有关详细信息,请参阅 “启用 Windows 节点池”。
使用带参数az aksarc nodepool add的--os-type Windows命令添加具有 Windows 容器主机的节点池。 如果未指定操作系统 SKU,则节点池将根据集群的 Kubernetes 版本设置为默认操作系统。 Windows Server 2022 是 Kubernetes 版本 1.25.0 及更高版本的默认作系统。
若要使用 Windows Server 2022,请指定以下参数:
-
--os-type设置为Windows。 -
--os-sku设置为Windows2022(可选)。
以下命令创建一个名为 $mynodepool 的新节点池,并将其添加到 $myAKSCluster,其中包含一个 Windows Server 2022 节点:
az aksarc nodepool add --resource-group $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --node-count 1 --os-type Windows --os-sku Windows2022
连接到 AKS 群集
现在,可以通过从本地计算机运行 az connectedk8s proxy 命令连接到 Kubernetes 群集。 在运行此命令之前,请确保登录到 Azure。 如果有多个 Azure 订阅,请使用 az account set 命令选择相应的订阅 ID。
以下命令将 Kubernetes 群集的 kubeconfig 下载到本地计算机,并将代理连接通道打开到本地 Kubernetes 群集。 只要此命令运行,通道就处于打开状态。 只要想要访问群集,就可以运行此命令。 如果命令超时,请关闭 CLI 窗口,打开一个新窗口,然后再次运行该命令。
必须对托管 AKS 群集的资源组具有参与者权限才能成功运行以下命令:
az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config
预期输出:
Proxy is listening on port 47011
Merged "aks-workload" as current context in .\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using kubeconfig at .\aks-arc-kube-config
Press Ctrl+C to close proxy.
使此会话保持运行状态,并从其他终端/命令提示符连接到 Kubernetes 群集。 通过运行 kubectl get 命令验证是否可以连接到 Kubernetes 群集。 此命令返回群集节点的列表:
kubectl get node -A --kubeconfig .\aks-arc-kube-config
以下示例输出显示了在前面的步骤中创建的节点。 确保节点状态为 Ready:
NAME STATUS ROLES AGE VERSION
moc-lesdc78871d Ready control-plane 6d8h v1.26.3
moc-lupeeyd0f8c Ready <none> 6d8h v1.26.3
moc-ww2c8d5ranw Ready <none> 7m18s v1.26.3
部署示例应用程序
Kubernetes 清单文件定义群集的所需状态,例如,要运行哪些容器映像。
可以使用 YAML 清单创建在 Windows Server 容器中运行 ASP.NET 示例应用程序所需的所有对象。 此清单包括用于 ASP.NET 示例应用程序的 Kubernetes 部署 ,以及用于从 Internet 访问应用程序的 Kubernetes 服务。
ASP.NET 示例应用程序作为 .NET Framework 示例 的一部分提供,并在 Windows Server 容器中运行。 AKS 要求 Windows Server 容器基于 Windows Server 2019 或更高版本的映像。 Kubernetes 清单文件还必须定义 节点选择器 ,以确保在可以运行 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 清单。
使用 kubectl apply 命令部署应用程序,并指定 YAML 清单的名称:
kubectl apply -f sample.yaml --kubeconfig .\\aks-arc-kube-config
以下示例输出显示已成功创建部署和服务:
deployment.apps/sample created
service/sample created
测试应用程序
应用程序运行时,Kubernetes 服务将向 Internet 公开应用程序前端。 此过程可能需要几分钟才能完成。 有时,服务可能会花费比几分钟更长的时间进行预配。 最多允许 10 分钟进行预配。
-
kubectl get service sample --watch --kubeconfig .\aks-arc-kube-config最初,输出将示例服务的 EXTERNAL-IP 显示为 挂起:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE sample LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s当 EXTERNAL-IP 地址从 待定 更改为 IP 地址时,请使用 CTRL-C 停止 kubectl 观察进程。 以下示例输出显示向服务分配了有效的公共 IP 地址:
sample LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m 通过在 Web 浏览器中输入示例服务的外部 IP 地址和端口,查看示例应用的实际效果。
如果在尝试加载页面时收到连接超时,则应使用
kubectl get pods --watch命令验证示例应用是否已准备就绪。 有时,当外部 IP 地址可用时,Windows 容器不会启动。
删除节点池
使用 az aksarc nodepool delete以下命令删除节点池:
az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait