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

適用于: AKS on Azure Stack HCI、Windows Server 2019 Datacenter 上的 AKS runtime

在本教學課程中,您會將 Windows Server 容器中的 ASP.NET 範例應用程式部署至 Kubernetes 叢集,並瞭解如何測試及調整您的應用程式。 您也將瞭解如何將 Windows 節點加入 Active Directory 網域。 本教學課程假設您對 Kubernetes 概念有基本的瞭解。 如需詳細資訊,請參閱 Azure Stack HCI 上 Azure Kubernetes Service 的 Kubernetes 核心概念

開始之前

確認您已備妥下列需求:

部署應用程式

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

ASP.NET 範例應用程式是 .NET Framework 範例中提供的一部份,並且可在 Windows Server 容器中執行。 Azure Stack HCI 上的 Azure Kubernetes Service 需要 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 命令。 有時候,在 windows 容器啟動之前,外部 IP 位址可供使用。

調整應用程式 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

後續步驟