创建 Windows Server 容器

适用于:Azure 本地版本 23H2

本文介绍如何使用 Azure CLI 将节点池部署到运行 Windows Server 容器的现有 AKS 群集。 它还介绍如何将 Windows Server 容器中的 ASP.NET 示例应用程序部署到群集。

先决条件

按照“如何创建 AKS 群集”中的 说明创建 AKS 群集

添加节点池

默认情况下,将使用可运行 Linux 容器的节点池创建 Kubernetes 群集。 必须添加另一个节点池,该节点池可与 Linux 节点池一起运行 Windows Server 容器。

使用带参数--os-type Windowsaz 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。

  1. 创建名为 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 清单

  2. 使用 kubectl apply 命令部署应用程序,并指定 YAML 清单的名称:

    kubectl apply -f sample.yaml --kubeconfig .\\aks-arc-kube-config
    

以下示例输出显示已成功创建部署和服务:

deployment.apps/sample created
service/sample created

测试应用程序

应用程序运行时,Kubernetes 服务将向 Internet 公开应用程序前端。 此过程可能需要几分钟才能完成。 有时,服务预配的时间可能超过几分钟。 最多允许 10 分钟进行预配。

  1. 使用带有 --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
    
  2. 通过打开 Web 浏览器到示例服务的外部 IP 地址和端口 ,查看示例应用正在运行中的示例 应用。

    显示 ASP.NET 示例应用程序的屏幕截图。

    如果在尝试加载页面时收到连接超时,则应使用 kubectl get pods --watch 命令验证示例应用是否已准备就绪。 有时,当你的外部 IP 地址可用时,Windows 容器无法启动。

删除节点池

使用 az akshybrid nodepool delete 以下命令删除节点池:

az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait

后续步骤

通过 Arc 启用的 AKS 概述