教學課程:部署Linux應用程式

適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS

本教學課程說明如何在 Azure Arc 所啟用的 AKS 中,部署包含 Web 前端和 Redis 資料庫實例的多容器應用程式。您也會瞭解如何測試及調整您的應用程式。

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

開始之前

確認您已備妥下列需求:

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

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

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

注意

部署與另一個目標叢集共享網路的目標叢集可能會導致負載平衡器 IP 位址衝突。 如果您在共用相同 AksHciClusterNetwork 對象的目標叢集中部署兩個使用不同的埠的工作負載,可能會發生IP位址衝突。 由於IP位址和埠對應在HA Proxy內配置的方式,因此可能會導致指派重複的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

後續步驟

使用 Azure 監視器來監視您的叢集和應用程式