在 Azure Stack HCI 和 Windows Server 上的 Azure Kubernetes Service 中部署 Windows 應用程式

適用於:Azure Stack HCI 和 Windows Server

在本教學課程中,您將會瞭解如何將 Windows Server 容器中的 ASP.NET 範例應用程式部署至 Kubernetes 叢集,並瞭解如何測試及調整您的應用程式。 您也將了解如何將 Windows 節點加入 Active Directory 網域。

本教學課程假設您對 Kubernetes 概念有基本了解。 如需詳細資訊,請參閱適用於 Azure Stack HCI 和 Windows Server 上的 AKS Kubernetes 核心概念

開始之前

請確定您已符合下列需求:

此外:

  • 在 PowerShell 系統管理視窗中執行此文件中的命令。
  • 確定作業系統特定工作負載落在適當的容器主機上。 如果您有混合的 Linux 和 Windows 背景工作角色節點 Kubernetes 叢集,您可以使用節點選取器或 taint 和 toleration。 如需詳細資訊,請參閱使用節點選取器以及污點和容差

部署應用程式

Kubernetes 資訊清單檔會定義所需的叢集狀態,例如要執行哪些容器映像。 在本文中,資訊清單可用來建立在 Windows Server 容器中執行 ASP.NET 範例應用程式所需的所有物件。 此資訊清單包含 ASP.NET 範例應用程式的 Kubernetes 部署,以及從網際網路存取應用程式的外部 Kubernetes 服務。

ASP.NET 範例應用程式是 .NET Framework 範例中提供的一部份,並且可在 Windows Server 容器中執行。 Azure Stack HCI 和 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:
        "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 服務會向網際網路公開前端應用程式。 此程序需要數分鐘的時間完成。 服務有時可能需要超過幾分鐘的時間來佈建。 在這些情況下,最多允許 10 分鐘的時間。

若要監視進度,請使用 kubectl get service 命令搭配 --watch 引數。

kubectl get service sample --watch

一開始,sample 服務的 EXTERNAL-IP 會顯示為 pending

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

若要查看範例應用程式的實際運作情況,請開啟網頁瀏覽器並瀏覽至服務的外部 IP 位址。

瀏覽至 ASP.NET 應用程式範例的影像

如果您在嘗試載入頁面時收到連接逾時,請確認範例應用程式是否已準備好使用 kubectl get pods --watch 命令。 有時候,外部 IP 位址在 Windows 容器啟動之前可供使用。

調整應用程式 Pod

我們已建立應用程式前端的單一複本。 若要查看叢集中的 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

後續步驟