快速入門:使用 Azure PowerShell 為 AKS 叢集部署 Azure Linux 容器主機
使用 Azure PowerShell 為 AKS 叢集部署 Azure Linux 容器主機,以開始使用 Azure Linux 容器主機。 安裝必要條件之後,請建立資源群組、建立 AKS 叢集、連線至叢集,然後在叢集中執行範例多容器應用程式。
必要條件
- 如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶。
- 使用 PowerShell 環境的 Azure Cloud Shell。 如需詳細資訊,請參閱 Azure Cloud Shell 快速入門。
- 如果您在本機執行 PowerShell,請安裝
Az PowerShell
模組,並使用Connect-AzAccount
Cmdlet 連線至您的 Azure 帳戶。 如需安裝 Az PowerShell 模組的詳細資訊,請參閱安裝 Azure PowerShell。 - 您用來建立叢集的身分識別具有適當的最低權限。 如需 AKS 存取和身分識別的詳細資訊,請參閱 Azure Kubernetes Service (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
已安裝。
使用
Install-AzAksCliTool
Cmdlet 在本機安裝kubectl
。Install-AzAksCliTool
使用
Import-AzAksCredential
Cmdlet 設定kubectl
以連線至 Kube 叢集。 此命令會下載憑證並設定 Kubernetes CLI 以供使用。Import-AzAksCredential -ResourceGroupName testAzureLinuxResourceGroup -Name testAzureLinuxCluster
使用
kubectl get
命令確認叢集的連線。 此命令會傳回叢集 Pod 的清單。kubectl get pods --all-namespaces
部署應用程式
若要部署應用程式,您可以使用資訊清單檔來建立執行 AKS 市集應用程式所需的所有物件。 Kubernetes 資訊清單檔會定義叢集所需的狀態,例如要執行哪些容器映像。 資訊清單包含下列 Kubernetes 部署和服務:
- 市集前端:供客戶檢視產品和下單的 Web 應用程式。
- 產品服務:顯示產品資訊。
- 訂單服務:下單。
- Rabbit MQ:訂單佇列的訊息佇列。
注意
除非是針對生產環境的永續性儲存,否則不建議執行具狀態容器,例如 Rabbit MQ。 這裡使用具狀態容器是為了簡單起見,但我們建議使用受管理的服務,例如 Azure Cosmos DB 或 Azure 服務匯流排。
建立名為
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 裡的預設目錄。
使用 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 服務會將應用程式前端公開至網際網路。 此程序可能需要幾分鐘才能完成。
使用 kubectl get pods 命令檢視已部署 Pod 的狀態。 請先確認全部 Pod 都是
Running
後再繼續進行。kubectl get pods
檢查市集前端應用程式的公用 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
若要查看 Azure 市集應用程式的實際運作情況,請開啟網頁瀏覽器並瀏覽至服務的外部 IP 位址。
選取叢集
如果您不打算繼續進行下列教學課程,請移除已建立的資源,以避免產生 Azure 費用。
使用
RemoveAzResourceGroup
Cmdlet 移除資源群組和所有相關資源。Remove-AzResourceGroup -Name testAzureLinuxResourceGroup
下一步
在本快速入門中,您已部署 Azure Linux 容器主機 AKS 叢集。 若要深入了解 Azure Linux 容器主機,並查看完整的叢集部署和管理範例,請繼續進行 Azure Linux 容器主機教學課程。