创建 Windows Server 容器
适用于:Azure 本地版本 23H2
本文介绍如何使用 Azure CLI 将节点池部署到运行 Windows Server 容器的现有 AKS 群集。 它还介绍如何将 Windows Server 容器中的 ASP.NET 示例应用程序部署到群集。
先决条件
按照“如何创建 AKS 群集”中的 说明创建 AKS 群集。
添加节点池
默认情况下,将使用可运行 Linux 容器的节点池创建 Kubernetes 群集。 必须添加另一个节点池,该节点池可与 Linux 节点池一起运行 Windows Server 容器。
使用带参数--os-type Windows
的az aksarc nodepool add
命令添加具有 Windows 容器主机的节点池。 如果未指定操作系统 SKU,则节点池将基于群集的 Kubernetes 版本设置为默认 OS。 Windows Server 2022 是 Kubernetes 版本 1.25.0 及更高版本的默认操作系统。 Windows Server 2019 是早期版本的默认操作系统。
- 若要使用 Windows Server 2019,请指定以下参数:
os-type
设置为Windows
。os-sku
设置为Windows2019
。
- 若要使用 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 分钟进行预配。
使用带有
--watch
参数的 kubectl get service 命令来监视进度。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 akshybrid nodepool delete
以下命令删除节点池:
az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait