教學課程:在 AKS 混合式中部署 Linux 應用程式

適用于:Azure Stack HCI 上的 AKS、Windows Server 上的 AKS

本教學課程說明如何在 AKS 混合式的 Azure Kubernetes Service (AKS) 叢集上部署包含 Web 前端和 Redis 資料庫實例的多容器應用程式。 您將會看到如何測試及調整您的應用程式。

本教學課程假設您對 Kubernetes 概念有基本了解。 如需詳細資訊,請參閱 AKS 混合式的 Kubernetes 核心概念

開始之前

確認您已備妥下列需求:

  • 至少有一個 Linux 背景工作節點啟動並執行的 AKS 叢集。
  • 用來存取叢集的 kubeconfig 檔案。
  • 已安裝 AksHci PowerShell 模組。 如需詳細資訊,請參閱 Install-AksHci

當您執行教學課程程式時:

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

注意

部署與另一個目標叢集共用網路的目標叢集可能會導致負載平衡器 IP 位址衝突。 如果您在共用相同 AksHciClusterNetwork 物件的目標叢集中部署兩個使用不同的埠的工作負載,可能會發生 IP 位址衝突。 由於在 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會顯示為擱置中。

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

EXTERNAL-IP位址從擱置變更為實際的公用 IP 位址時,請使用CTRL-C來停止 kubectl watch程式。 下列範例輸出顯示指派給服務的有效公用 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 投票應用程式應用程式的首頁螢幕擷取畫面,部署在 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

後續步驟