快速入門:使用 Azure 入口網站部署 Azure Kubernetes Service (AKS) 叢集

Azure Kubernetes Service (AKS) 是受控 Kubernetes 服務,可讓您快速部署及管理叢集。 在本快速入門中,您將:

  • 使用 Azure 入口網站部署 AKS 叢集。
  • 使用一組微服務和 Web 前端來模擬零售案例,執行範例多容器應用程式。

注意

若要開始快速佈建 AKS 叢集,本文包含僅針對評估目的部署具有預設設定值之叢集的步驟。 在部署生產就緒叢集之前,建議您先熟悉我們的基準參考架構,考慮其如何符合您的業務需求。

開始之前

本快速入門假設您已有 Kubernetes 概念的基本知識。 如需詳細資訊,請參閱 Azure Kubernetes Services (AKS) 的 Kubernetes 核心概念

注意

Azure Linux 節點集區現已正式發行 (GA)。 若要了解優點和部署步驟,請參閱適用於 AKS 的 Azure Linux 容器主機簡介

建立 AKS 叢集

  1. 登入 Azure 入口網站

  2. 在 Azure 入口網站的首頁中,選取 [建立資源]

  3. 在 [類別] 區段中,選取 [容器]>[Azure Kubernetes Service (AKS)]

  4. 在 [基本] 索引標籤上,設定下列選項:

    • 在 [專案詳細資料] 下:
      • 選取 Azure 訂用帳戶
      • 建立 Azure 資源群組,例如 myResourceGroup。 雖然您可以選取現有的資源群組,以供測試或評估之用,但建議您建立資源群組來暫時裝載這些資源,並避免影響您的生產或開發工作負載。
    • 在 [叢集詳細資料] 下:
      • 將 [叢集預設設定] 設定為 [開發/測試]。 如需預設組態的詳細資訊,請參閱 Azure 入口網站中的叢集組態預設值

        注意

        您可以選取 [比較預設設定],然後選取不同的選項,來變更建立叢集時的預設設定。 建立 AKS 叢集 - 入口網站預設選項的螢幕快照。

      • 輸入 Kubernetes 叢集名稱,例如 myAKSCluster

      • 選取 AKS 叢集的區域

      • 將 [可用性區域] 設定設為 [無]

      • AKS 定價層設定為 [免費]

      • 保留針對 Kube 版本選取的預設值。

      • 將 [自動升級] 設定保留為建議值,這是 [以修補檔啟用]

      • 將 [驗證和授權] 設定保留為 [使用 Kubernetes RBAC 的本地帳戶]

        顯示如何在 Azure 入口網站 中設定 AKS 叢集的螢幕快照。

  5. 選取 [下一步]。 在 [節點集區] 索引標籤上,新增節點集區:

    • 選取 [新增節點集區]

    • 輸入節點集區名稱,例如 nplinux

    • 針對 [模式],選取 [使用者]

    • 針對 [OS SKU],選取 [Ubuntu Linux]

    • 將 [可用性區域] 設定設為 [無]

    • 取消勾選 [啟用 Azure 現成執行個體] 核取方塊。

    • 針對 [節點大小],選取 [選擇大小]。 在 [選取 VM 大小] 頁面上,選取 [D2s_v3],然後選擇 [選取] 按鈕。

    • 將 [調整方法] 設定保留為 [自動調整]

    • 保留 [最小節點計數] 和 [最大節點計數] 欄位的預設設定。

      顯示如何建立執行UbuntuLinux之節點集區的螢幕快照。

  6. 將其他索引標籤上的所有設定保留為預設值,但 [監視] 索引標籤上的設定除外。根據預設,Azure 監視器功能容器深入解析、適用於 Prometheus 的 Azure 監視器受控服務,以及已啟用 Azure 受控 Grafana。 您可以藉由停用它們來節省成本。

  7. 選取 [檢閱 + 建立] 在叢集設定上執行驗證。 驗證完成後,選取 [建立] 建立 AKS 叢集。

建立 AKS 叢集需要幾分鐘的時間。 部署完成時,請瀏覽至您的資源,方法是:

  • 選取 [移至資源],或
  • 瀏覽至 AKS 叢集資源群組,然後選取 AKS 資源。 在此範例中,您會瀏覽 myResourceGroup,然後選取資源 myAKSCluster

連線至叢集

若要管理 Kubernetes 叢集,請使用 Kubernetes 命令列用戶端 kubectl。 如果您使用 Azure Cloud Shell,則 kubectl 已安裝。 如果您不熟悉 Cloud Shell,請檢閱 Azure Cloud Shell 概觀

如果您使用 Cloud Shell,請使用 Azure 入口網站頂端的 >_ 按鈕加以開啟。 如果您在本地使用 PowerShell,請透過 Connect-AzAccount 命令連線到 Azure。 如果您在本地使用 Azure CLI,請透過 az login 命令連線到 Azure。

  1. 使用 az aks get-credentials 命令,設定 kubectl 連線到 Kubernetes 叢集。 此命令會下載憑證並設定 Kubernetes CLI 以供使用。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. 使用 kubectl get 命令來傳回叢集節點的清單,以驗證對您叢集的連線。

    kubectl get nodes
    

    下列輸出範例會顯示上一個步驟中建立的單一節點。 確定節點的狀態為就緒

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-31718369-0   Ready    agent   6m44s   v1.15.10
    

部署應用程式

若要部署應用程式,您可以使用資訊清單檔來建立執行 AKS 市集應用程式所需的所有物件。 Kubernetes 資訊清單檔會定義叢集所需的狀態,例如要執行哪些容器映像。 資訊清單包含下列 Kubernetes 部署和服務:

Azure 市集範例架構的螢幕快照。

  • 市集前端:供客戶檢視產品和下單的 Web 應用程式。
  • 產品服務:顯示產品資訊。
  • 訂單服務:下單。
  • Rabbit MQ:訂單佇列的訊息佇列。

注意

除非是針對生產環境的永續性儲存,否則不建議執行具狀態容器,例如 Rabbit MQ。 這裡使用具狀態容器是為了簡單起見,但我們建議使用受控服務,例如 Azure CosmosDB 或 Azure 服務總線。

  1. 在 Cloud Shell 中,開啟編輯器,並建立名為 aks-store-quickstart.yaml 的檔案。

  2. 將下列資訊清單貼到編輯器中:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: rabbitmq
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: rabbitmq
      template:
        metadata:
          labels:
            app: rabbitmq
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: rabbitmq
            image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine
            ports:
            - containerPort: 5672
              name: rabbitmq-amqp
            - containerPort: 15672
              name: rabbitmq-http
            env:
            - name: RABBITMQ_DEFAULT_USER
              value: "username"
            - name: RABBITMQ_DEFAULT_PASS
              value: "password"
            resources:
              requests:
                cpu: 10m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            volumeMounts:
            - name: rabbitmq-enabled-plugins
              mountPath: /etc/rabbitmq/enabled_plugins
              subPath: enabled_plugins
          volumes:
          - name: rabbitmq-enabled-plugins
            configMap:
              name: rabbitmq-enabled-plugins
              items:
              - key: rabbitmq_enabled_plugins
                path: enabled_plugins
    ---
    apiVersion: v1
    data:
      rabbitmq_enabled_plugins: |
        [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0].
    kind: ConfigMap
    metadata:
      name: rabbitmq-enabled-plugins
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: rabbitmq
    spec:
      selector:
        app: rabbitmq
      ports:
        - name: rabbitmq-amqp
          port: 5672
          targetPort: 5672
        - name: rabbitmq-http
          port: 15672
          targetPort: 15672
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: order-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: order-service
      template:
        metadata:
          labels:
            app: order-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: order-service
            image: ghcr.io/azure-samples/aks-store-demo/order-service:latest
            ports:
            - containerPort: 3000
            env:
            - name: ORDER_QUEUE_HOSTNAME
              value: "rabbitmq"
            - name: ORDER_QUEUE_PORT
              value: "5672"
            - name: ORDER_QUEUE_USERNAME
              value: "username"
            - name: ORDER_QUEUE_PASSWORD
              value: "password"
            - name: ORDER_QUEUE_NAME
              value: "orders"
            - name: FASTIFY_ADDRESS
              value: "0.0.0.0"
            resources:
              requests:
                cpu: 1m
                memory: 50Mi
              limits:
                cpu: 75m
                memory: 128Mi
          initContainers:
          - name: wait-for-rabbitmq
            image: busybox
            command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;']
            resources:
              requests:
                cpu: 1m
                memory: 50Mi
              limits:
                cpu: 75m
                memory: 128Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: order-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 3000
        targetPort: 3000
      selector:
        app: order-service
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: product-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: product-service
      template:
        metadata:
          labels:
            app: product-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: product-service
            image: ghcr.io/azure-samples/aks-store-demo/product-service:latest
            ports:
            - containerPort: 3002
            resources:
              requests:
                cpu: 1m
                memory: 1Mi
              limits:
                cpu: 1m
                memory: 7Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: product-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 3002
        targetPort: 3002
      selector:
        app: product-service
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: store-front
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: store-front
      template:
        metadata:
          labels:
            app: store-front
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: store-front
            image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
            ports:
            - containerPort: 8080
              name: store-front
            env:
            - name: VUE_APP_ORDER_SERVICE_URL
              value: "http://order-service:3000/"
            - name: VUE_APP_PRODUCT_SERVICE_URL
              value: "http://product-service:3002/"
            resources:
              requests:
                cpu: 1m
                memory: 200Mi
              limits:
                cpu: 1000m
                memory: 512Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: store-front
    spec:
      ports:
      - port: 80
        targetPort: 8080
      selector:
        app: store-front
      type: LoadBalancer
    

    如需 YAML 資訊清單檔案的詳細資訊,請參閱部署和 YAML 資訊清單

    如果您在本地建立並儲存 YAML 檔案,則可以選取 [上傳/下載檔案] 按鈕,然後從本地文件系統選取檔案,將資訊清單檔上傳至 CloudShell 裡的預設目錄。

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

    kubectl apply -f aks-store-quickstart.yaml
    

    下列範例輸出會顯示部署和服務:

    deployment.apps/rabbitmq created
    service/rabbitmq created
    deployment.apps/order-service created
    service/order-service created
    deployment.apps/product-service created
    service/product-service created
    deployment.apps/store-front created
    service/store-front created
    

測試應用程式

當應用程式執行時,Kubernetes 服務會將應用程式前端公開至網際網路。 此程序可能需要幾分鐘才能完成。

  1. 使用 kubectl get pods 命令檢視已部署 Pod 的狀態。 請先確認全部 Pod 都是 Running 後再繼續進行。

    kubectl get pods
    
  2. 檢查市集前端應用程式的公用 IP 位址。 使用 kubectl get service 命令搭配 --watch 引數來監視進度。

    kubectl get service store-front --watch
    

    store-front 服務的 EXTERNAL-IP 輸出一開始會顯示為擱置

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   <pending>     80:30025/TCP   4h4m
    

    當 EXTERNAL-IP 位址從暫止變成實際的公用 IP 位址時,請使用 CTRL-C 停止 kubectl 監看式流程。

    下列範例輸出顯示指派給服務的有效公用 IP 位址:

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   20.62.159.19   80:30025/TCP   4h5m
    
  3. 若要查看 Azure 市集應用程式的實際運作情況,請開啟網頁瀏覽器並瀏覽至服務的外部 IP 位址。

    AKS 市集範例應用程式的螢幕快照。

選取叢集

若要避免 Azure 費用,如果您不打算進行後續的 AKS 教學課程,請清除不必要的資源。

  1. 在 Azure 入口網站中,瀏覽至您的 AKS 叢集資源群組。

  2. 選取 [刪除資源群組]

  3. 輸入要刪除的資源群組名稱,然後選取 [刪除]>[刪除]

    注意

    AKS 叢集是使用系統指派的受控識別所建立。 此受控識別是由平台管理,而且不需要移除。

下一步

在本快速入門中,您已部署 Kubernetes 叢集,接著將簡單多容器應用程式部署到此叢集。 這個範例應用程式僅供示範之用,並不代表 Kube 應用程式的全部最佳做法。 如需針對生產使用 AKS 建立完整解決方案的指引,請參閱 AKS 解決方案指引

若要深入了解 AKS,並逐步完成部署範例的完整程式碼,請繼續 Kube 叢集教學課程。