快速入門:使用 Bicep Kubernetes 延伸模組 (預覽) 部署 Azure Kubernetes Service (AKS) 叢集
Azure Kubernetes Service (AKS) 是受控 Kubernetes 服務,可讓您快速部署及管理叢集。 在本快速入門中,您將:
- 使用 Bicep Kubernetes 延伸模組部署 AKS 叢集 (預覽)。
- 使用一組微服務和 Web 前端模擬零售情節,執行範例多容器應用程式。
重要
Bicep Kubernetes 延伸模組目前為預覽狀態。 您可以從 Bicep 組態檔 新增下列內容以啟用功能:
{
"experimentalFeaturesEnabled": {
"extensibility": true,
}
}
注意
若要開始快速佈建 AKS 叢集,本文包含僅針對評估目的部署具有預設設定值之叢集的步驟。 在部署生產就緒叢集之前,建議您先熟悉我們的基準參考架構,考慮其如何符合您的業務需求。
開始之前
本快速入門假設您已有 Kubernetes 概念的基本知識。 如需詳細資訊,請參閱 Azure Kubernetes Services (AKS) 的 Kubernetes 核心概念。
- 如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶。
- 確定您用來建立叢集的身分識別擁有適當的最低權限。 如需 AKS 存取和身分識別的詳細資訊,請參閱 Azure Kubernetes Service (AKS) 的存取與身分識別選項。
Bicep 是使用宣告式語法來部署 Azure 資源的特定領域語言 (DSL)。 其提供簡潔的語法、可靠的類型安全,並支援程式碼重複使用。 Bicep 能夠為您在 Azure 中的基礎結構即程式碼解決方案,提供最佳的製作體驗。
- 若要設定您的環境以進行 Bicep 開發,請參閱安裝 Bicep 工具 (部分機器翻譯)。 完成步驟之後,您會擁有 Visual Studio Code 和 Bicep 延伸模組。 您也可以使用最新的 Azure CLI 版本 (部分機器翻譯) 或最新的 Azure PowerShell 模組 (英文)。
- 若要使用 Bicep 檔案建立 AKS 叢集,您必須提供 SSH 公開金鑰。 如果您需要此資源,請參閱下一節。 否則,請跳至 檢閱 Bicep 檔案。
- 若要部署 Bicep 檔案,您需要對即將部署的資源具備寫入權限,並可存取
Microsoft.Resources/deployments
資源類型上的所有作業。 例如,若要部署虛擬機器,您需要Microsoft.Compute/virtualMachines/write
和Microsoft.Resources/deployments/*
權限。 如需角色與權限的清單,請參閱 Azure 內建角色。
建立 SSH 金鑰組
移至 https://shell.azure.com,並在您的瀏覽器中開啟 Cloud Shell。
使用 az sshkey create Azure CLI 命令或
ssh-keygen
命令建立 SSH 金鑰組。# Create an SSH key pair using Azure CLI az sshkey create --name "mySSHKey" --resource-group "myResourceGroup" # Create an SSH key pair using ssh-keygen ssh-keygen -t rsa -b 4096
如需建立 SSH 金鑰的詳細資訊,請參閱在 Azure 中建立及管理驗證的 SSH 金鑰。
檢閱 Bicep 檔案
本文中用於建立 AKS 叢集的 Bicep 檔案來自 Azure 快速入門範本。 如需更多 AKS 範例,請參閱 AKS 快速入門範本。
@description('The name of the Managed Cluster resource.')
param clusterName string = 'aks101cluster'
@description('The location of the Managed Cluster resource.')
param location string = resourceGroup().location
@description('Optional DNS prefix to use with hosted Kubernetes API server FQDN.')
param dnsPrefix string
@description('Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize.')
@minValue(0)
@maxValue(1023)
param osDiskSizeGB int = 0
@description('The number of nodes for the cluster.')
@minValue(1)
@maxValue(50)
param agentCount int = 3
@description('The size of the Virtual Machine.')
param agentVMSize string = 'standard_d2s_v3'
@description('User name for the Linux Virtual Machines.')
param linuxAdminUsername string
@description('Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example \'ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm\'')
param sshRSAPublicKey string
resource aks 'Microsoft.ContainerService/managedClusters@2024-02-01' = {
name: clusterName
location: location
identity: {
type: 'SystemAssigned'
}
properties: {
dnsPrefix: dnsPrefix
agentPoolProfiles: [
{
name: 'agentpool'
osDiskSizeGB: osDiskSizeGB
count: agentCount
vmSize: agentVMSize
osType: 'Linux'
mode: 'System'
}
]
linuxProfile: {
adminUsername: linuxAdminUsername
ssh: {
publicKeys: [
{
keyData: sshRSAPublicKey
}
]
}
}
}
}
output controlPlaneFQDN string = aks.properties.fqdn
Bicep 檔案中定義的資源是 Microsoft.ContainerService/managedClusters。
將檔案複本以 main.bicep
儲存至本機電腦。
新增應用程式定義
若要部署應用程式,您可以使用資訊清單檔來建立執行 AKS 市集應用程式所需的全部物件。 Kubernetes 資訊清單檔會定義叢集所需的狀態,例如要執行哪些容器映像。 資訊清單包含下列 Kubernetes 部署和服務:
- 市集前端:供客戶檢視產品和下單的 Web 應用程式。
- 產品服務:顯示產品資訊。
- 訂單服務:下單。
- Rabbit MQ:訂單佇列的訊息佇列。
注意
除非是針對生產環境的永續性儲存,否則不建議執行具狀態容器,例如 Rabbit MQ。 這裡使用具狀態容器是為了簡單起見,但我們建議使用受管理的服務,例如 Azure CosmosDB 或 Azure 服務匯流排。
在相同資料夾中建立名為
aks-store-quickstart.yaml
的檔案,然後將main.bicep
的下列資訊清單複製進來: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 裡的預設目錄。
在 Visual Studio Code 中開啟
main.bicep
。按下 CTRL+SHIFT+P 以開啟命令選擇區。
搜尋 bicep,然後選取 Bicep:匯入 Kubernetes 資訊清單。
從提示中選取
aks-store-quickstart.yaml
。 此流程會在相同的資料夾中建立aks-store-quickstart.bicep
檔案。開啟
main.bicep
,並在檔案結尾新增下列 Bicep,以參考新建立的aks-store-quickstart.bicep
模組:module kubernetes './aks-store-quickstart.bicep' = { name: 'buildbicep-deploy' params: { kubeConfig: aks.listClusterAdminCredential().kubeconfigs[0].value } }
同時儲存
main.bicep
和aks-store-quickstart.bicep
。
部署 Bicep 檔案
使用 az group create 命令建立 Azure 資源群組。
az group create --name myResourceGroup --location eastus
使用 az deployment group create 命令來部署 Bicep 檔案。
az deployment group create --resource-group myResourceGroup --template-file main.bicep --parameters clusterName=<cluster-name> dnsPrefix=<dns-previs> linuxAdminUsername=<linux-admin-username> sshRSAPublicKey='<ssh-key>'
在命令中提供下列值:
- 叢集名稱: AKS 叢集的唯一名稱,例如 myAKSCluster。
- DNS 前置詞:為您的叢集輸入唯一的 DNS 前置詞,例如 myakscluster。
- Linux 管理員使用者名稱:輸入使用 SSH 連線的使用者名稱,例如 azureuser。
- SSH RSA 公開金鑰:複製並貼上 SSH 金鑰組的公開部分 (根據預設,為~/.ssh/id_rsa.pub內容)。
建立 AKS 叢集需要幾分鐘的時間。 請等到叢集成功部署後,再移至下一個步驟。
驗證 Bicep 部署
登入 Azure 入口網站。
在 Azure 入口網站功能表上或是從首頁中,瀏覽至您的 AKS 叢集。
在 Kubernetes 資源下,選取服務和輸入。
尋找儲存前端服務,並複製外部IP的值。
若要查看 Azure 市集應用程式的實際運作情況,請開啟網頁瀏覽器並瀏覽至服務的外部 IP 位址。
選取叢集
如果您不打算進行後續的 AKS 教學課程,請清除不必要資源以避免 Azure 費用。
請使用 az group delete 命令來移除資源群組、容器服務以及所有相關資源。
az group delete --name myResourceGroup --yes --no-wait
注意
在本快速入門中,是以系統指派的受控識別 (預設身分識別選項) 來建立 AKS 叢集。 平台會管理這個身分識別,您不需要手動移除它。
下一步
在本快速入門中,您已部署 Kubernetes 叢集,接著將簡單多容器應用程式部署到此叢集。 這個範例應用程式僅供示範之用,並不代表 Kube 應用程式的全部最佳做法。 如需針對生產使用 AKS 建立完整解決方案的指引,請參閱 AKS 解決方案指引。
若要深入了解 AKS,並逐步完成部署範例的完整程式碼,請繼續 Kube 叢集教學課程。