教學課程:在 Azure Stack HCI 和 Windows Server 上的 Azure Kubernetes Service 中部署 Linux 應用程式

適用於:Azure Stack HCI 上的 AKS 和 Windows Server

本教學課程中描述如何在 Azure Stack HCI 上的 AKS 和 Windows Server 叢集中,部署包含 Web 前端和 Redis 資料庫執行個體的多容器應用程式。 您將會看到如何測試及調整您的應用程式。

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

開始之前

確認您已備妥下列需求:

  • Azure Stack HCI 和 Windows Server 叢集上的 Azure Kubernetes Service (AKS),具有至少一個已啟動且正在執行的 Linux 背景工作角色節點。
  • 用來存取叢集的 kubeconfig 檔案。
  • 已安裝 Azure Stack HCI 上的 Azure Kubernetes Service PowerShell 模組。
  • 在 PowerShell 系統管理視窗中執行此文件中的命令。
  • 確定作業系統特定工作負載落在適當的容器主機上。 如果您有混合的 Linux 和 Windows 背景工作角色節點 Kubernetes 叢集,您可以使用節點選取器或污點和容差。 如需詳細資訊,請參閱使用節點選取器和污點和容差

注意

部署與另一個目標叢集共用網路的目標叢集時,可能會發生負載平衡器 IP 位址衝突。 如果您在共用相同 AksHciClusterNetwork 物件的目標叢集中部署兩個使用不同連接埠的工作負載,就可能會發生這種情況。 由於在 HA Proxy 內配置 IP 位址和連接埠對應的方式,這可能會導致重複的 IP 位址指派。 如果發生這種情況,在您重新部署工作負載之前,一或兩個工作負載都會遇到隨機網路連線問題。 當您重新部署工作負載時,可以使用會導致每個工作負載接收個別服務 IP 位址的相同連接埠,也可以在使用不同 AksHciClusterNetwork 物件的目標叢集上重新部署工作負載。

部署應用程式

Kubernetes 資訊清單檔會定義所需的叢集狀態,例如要執行哪些容器映像。 在本快速入門中,資訊清單可用來建立執行 Azure 投票應用程式所需的所有物件。 此資訊清單包含兩個 Kubernetes 部署:一個適用於範例 Azure 投票 Python 應用程式,而另一個適用於 Redis 執行個體。 還會建立兩個 Kubernetes 服務:內部服務用於 Redis 執行個體,而外部服務用於從網際網路存取 Azure 投票應用程式。

建立名為 azure-vote.yaml 的檔案,然後將下列 YAML 定義複製進來。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-back
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-back
  template:
    metadata:
      labels:
        app: azure-vote-back
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-back
        image: redis
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 6379
          name: redis
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-back
spec:
  ports:
  - port: 6379
  selector:
    app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-front
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-front
  template:
    metadata:
      labels:
        app: azure-vote-front
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-front
        image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 80
        env:
        - name: REDIS
          value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-front
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: azure-vote-front

使用 kubectl apply 命令來部署應用程式,並指定 YAML 資訊清單的名稱:

kubectl apply -f azure-vote.yaml

下列範例輸出會顯示已成功建立的部署和服務:

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

測試應用程式

執行應用程式時,Kubernetes 服務會向網際網路公開前端應用程式。 此程序需要數分鐘的時間完成。

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

kubectl get service azure-vote-front --watch

一開始,azure-vote-front 服務的 EXTERNAL-IP 會顯示為 pending

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27      <pending>     80:30572/TCP   22m

EXTERNAL-IP 位址從 pending 變成實際的公用 IP 位址時,請使用 CTRL-C 停止 kubectl 監看式流程。 下列範例輸出會顯示已指派給服務的有效公用 IP 位址:

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   24m

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

Azure 上 Kubernetes 叢集的影像

調整應用程式 Pod

我們已建立 Azure 投票前端和 Redis 執行個體的單一複本。 若要查看叢集中的 Pod 數目和狀態,請使用 kubectl get 命令:

kubectl get pods -n default

下列範例輸出會顯示一個前端 Pod 和一個後端 Pod:

NAME                                READY     STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1       Running   0          25m
azure-vote-front-84c8bf64fc-cdq86   1/1       Running   0          25m

若要變更 azure-vote-front 部署中的 Pod 數目,請使用 kubectl scale 命令。 下列範例會將前端 Pod 的數目增加為 5

kubectl scale --replicas=5 deployment/azure-vote-front

再次執行 kubectl get pods 以確認已建立其他 Pod。 大約一分鐘後,其他 Pod 就會成為叢集中的可用項目:

kubectl get pods -n default

Name                                READY   STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1     Running   0          31m
azure-vote-front-84c8bf64fc-cdq86   1/1     Running   0          31m
azure-vote-front-84c8bf64fc-56h64   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-djkp8   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-jmmvs   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-znc6z   1/1     Running   0          80s

後續步驟