共用方式為


快速入門:使用 Azure PowerShell 為 AKS 叢集部署 Azure Linux 容器主機

使用 Azure PowerShell 為 AKS 叢集部署 Azure Linux 容器主機,以開始使用 Azure Linux 容器主機。 安裝必要條件之後,請建立資源群組、建立 AKS 叢集、連線至叢集,然後在叢集中執行範例多容器應用程式。

必要條件

建立資源群組

Azure 資源群組是部署及管理 Azure 資源所在的邏輯群組。 建立資源群組時,必須指定位置。 此位置是資源群組中繼資料的儲存位置,如果您未在資源建立期間指定另一個區域,此位置也會是您在 Azure 中執行資源的位置。

下列範例會在 eastus 區域建立名為 testAzureLinuxResourceGroup 的資源群組。

  • 使用 New-AzResourceGroup Cmdlet 建立資源群組。

    New-AzResourceGroup -Name testAzureLinuxResourceGroup -Location eastus
    

    下列範例輸出類似於成功建立資源群組:

    ResourceGroupName : testAzureLinuxResourceGroup
    Location          : eastus
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testAzureLinuxResourceGroup
    

    注意

    上述範例使用 eastus,但 Azure Linux 容器主機叢集在所有區域中均可使用。

建立 Azure Linux 容器主機叢集

下列範例會建立名為 testAzureLinuxCluster、且包含一個節點的叢集。

  • 使用 New-AzAksCluster Cmdlet,並將 -NodeOsSKU 旗標設定為 AzureLinux,以建立 AKS 叢集。

    New-AzAksCluster -ResourceGroupName testAzureLinuxResourceGroup -Name testAzureLinuxCluster -NodeOsSKU AzureLinux
    

    幾分鐘後,命令會完成並傳回關於叢集的 JSON 格式資訊。

連線至叢集

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

  1. 使用 Install-AzAksCliTool Cmdlet 在本機安裝 kubectl

    Install-AzAksCliTool
    
  2. 使用 Import-AzAksCredential Cmdlet 設定 kubectl 以連線至 Kube 叢集。 此命令會下載憑證並設定 Kubernetes CLI 以供使用。

    Import-AzAksCredential -ResourceGroupName testAzureLinuxResourceGroup -Name testAzureLinuxCluster
    
  3. 使用 kubectl get 命令確認叢集的連線。 此命令會傳回叢集 Pod 的清單。

    kubectl get pods --all-namespaces
    

部署應用程式

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

Azure 市集範例結構的螢幕擷取畫面。

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

注意

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

  1. 建立名為 aks-store-quickstart.yaml 的檔案,然後將下列資訊清單複製進來:

    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 檔案,則可以選取上傳/下載檔案按鈕,然後從本地文件系統選取檔案,將資訊清單檔上傳至 CloudShell 裡的預設目錄。

  2. 使用 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
    
  3. 當 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
    
  4. 若要查看 Azure 市集應用程式的實際運作情況,請開啟網頁瀏覽器並瀏覽至服務的外部 IP 位址。

選取叢集

如果您不打算繼續進行下列教學課程,請移除已建立的資源,以避免產生 Azure 費用。

  • 使用 RemoveAzResourceGroup Cmdlet 移除資源群組和所有相關資源。

    Remove-AzResourceGroup -Name testAzureLinuxResourceGroup
    

下一步

在本快速入門中,您已部署 Azure Linux 容器主機 AKS 叢集。 若要深入了解 Azure Linux 容器主機,並查看完整的叢集部署和管理範例,請繼續進行 Azure Linux 容器主機教學課程。