部署 Windows 应用程序

适用于:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS

本教程介绍如何将 Windows Server 容器中的 ASP.NET 示例应用程序部署到 Arc 启用的 AKS) 群集Azure Kubernetes 服务 (,然后测试和缩放应用程序。 你还将了解如何将 Windows 节点加入 Active Directory 域。

本教程假定你对 Kubernetes 概念有基本的了解。 有关详细信息,请参阅 AKS 混合的 Kubernetes 核心概念

准备阶段

请确保满足以下要求:

遵循以下过程时:

  • 在 PowerShell 管理窗口中运行命令。
  • 确保在适当的容器主机上承载特定于 OS 的工作负荷。 如果 Kubernetes 群集混合使用 Linux 和 Windows 工作器节点,则可以使用节点选择器或污点和容忍。 有关详细信息,请参阅使用节点选择器以及排斥和容许

部署应用程序

Kubernetes 清单文件定义群集的所需状态,例如要运行的容器映像。 在这些过程中,清单用于创建在 Windows Server 容器中运行 ASP.NET 示例应用程序所需的所有对象。 此清单包括用于 ASP.NET 示例应用程序的 Kubernetes 部署,以及用于从 Internet 访问应用程序的外部 Kubernetes 服务。

ASP.NET 示例应用程序作为.NET Framework示例的一部分提供,并在 Windows Server 容器中运行。 AKS Arc 要求 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:
        "beta.kubernetes.io/os": windows
      containers:
      - name: sample
        image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp
        resources:
          limits:
            cpu: 1
            memory: 800M
          requests:
            cpu: .1
            memory: 300M
        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

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

kubectl apply -f sample.yaml

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

deployment.apps/sample created
service/sample created

测试应用程序

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

若要监视进度,请使用 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 地址:

NAME    TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)        AGE
sample  LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m

若要查看示例应用的实际效果,请打开 Web 浏览器并转到服务的外部 IP 地址。

AKS 群集上部署的 windows ASP.NET 示例应用程序的主页的屏幕截图。

如果尝试加载页面时连接超时,请运行 kubectl get pods --watch 命令验证示例应用是否已准备就绪。 有时,外部 IP 地址在 Windows 容器启动之前可用。

缩放应用程序 Pod

我们创建了应用程序前端的单个副本 (replica) 。 若要查看群集中 Pod 的数目和状态,请使用 kubectl get 命令,如下所示:

kubectl get pods -n default

若要更改示例部署中的 Pod 数,请使用 kubectl scale 命令。 以下示例将前端 Pod 数增加到 3:

kubectl scale --replicas=3 deployment/sample

再次运行 kubectl get pods 以验证是否已创建 Pod。 一分钟左右之后,其他 Pod 会在群集中提供:

kubectl get pods -n default

后续步骤