快速入門:使用 ARM 範本部署適用於 AKS 叢集的 Azure Linux 容器主機
使用 Azure Resource Manager (ARM) 範本,部署 Azure Linux 容器主機叢集,以開始使用 Azure Linux 容器主機。 安裝必要條件之後,您將建立 SSH 金鑰組、檢閱範本、部署範本並加以驗證,然後部署應用程式。
Azure Resource Manager 範本是一個 JavaScript 物件標記法 (JSON) 檔案,會定義專案的基礎結構和設定。 範本使用宣告式語法。 您可以描述預期的部署,而不需要撰寫程式設計命令順序來建立部署。
必要條件
-
如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶。
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 快速入門 - Bash。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
如果您尚未安裝 kubectl,請使用
az aks install-cli
或遵循上游指示,透過 Azure CLI 加以安裝。若要使用 Resource Manager 範本建立 AKS 叢集,您必須提供 SSH 公開金鑰。 如果您需要此資源,請參閱下一節;否則請跳至檢閱範本一節。
您用來建立叢集的身分識別擁有適當的最低權限。 如需 AKS 存取和身分識別的詳細資訊,請參閱 Azure Kubernetes Service (AKS) 的存取與身分識別選項。
若要部署 Bicep 檔案或 ARM 範本,您需要對即將進行部署的資源具備寫入存取權,並可存取 Microsoft.Resources/部署資源類型上的所有作業。 例如,若要部署虛擬機器,您需要 Microsoft.Compute/virtualMachines/write 和 Microsoft.Resources/deployments/* 權限。 如需角色與權限的清單,請參閱 Azure 內建角色。
建立 SSH 金鑰組
若要存取 AKS 節點,您可以使用 SSH 金鑰組 (公用和私人) 進行連線,您可以使用 ssh-keygen
命令產生該金鑰組。 根據預設,這些檔案會建立在 ~/.ssh 目錄中。 執行 ssh-keygen
命令會覆寫任何指定位置中已經存在相同名稱的 SSH 金鑰組。
移至 https://shell.azure.com,並在瀏覽器中開啟 Cloud Shell。
執行
ssh-keygen
命令。 下列命令會使用 RSA 加密建立 SSH 金鑰組,位元長度為 4096:ssh-keygen -t rsa -b 4096
如需建立 SSH 金鑰的詳細資訊,請參閱在 Azure 中建立及管理驗證的 SSH 金鑰。
檢閱範本
下列部署使用來自 Azure 快速入門範本的 ARM 範本。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {
"clusterName": {
"type": "string",
"defaultValue": "azurelinuxakscluster",
"metadata": {
"description": "The name of the Managed Cluster resource."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location of the Managed Cluster resource."
}
},
"dnsPrefix": {
"type": "string",
"metadata": {
"description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
}
},
"osDiskSizeGB": {
"type": "int",
"defaultValue": 0,
"minValue": 0,
"maxValue": 1023,
"metadata": {
"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."
}
},
"agentCount": {
"type": "int",
"defaultValue": 3,
"minValue": 1,
"maxValue": 50,
"metadata": {
"description": "The number of nodes for the cluster."
}
},
"agentVMSize": {
"type": "string",
"defaultValue": "Standard_DS2_v2",
"metadata": {
"description": "The size of the Virtual Machine."
}
},
"linuxAdminUsername": {
"type": "string",
"metadata": {
"description": "User name for the Linux Virtual Machines."
}
},
"sshRSAPublicKey": {
"type": "string",
"metadata": {
"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'"
}
},
"osType": {
"type": "string",
"defaultValue": "Linux",
"allowedValues": [
"Linux"
],
"metadata": {
"description": "The type of operating system."
}
},
"osSKU": {
"type": "string",
"defaultValue": "AzureLinux",
"allowedValues": [
"AzureLinux",
"Ubuntu"
],
"metadata": {
"description": "The Linux SKU to use."
}
}
},
"resources": [
{
"type": "Microsoft.ContainerService/managedClusters",
"apiVersion": "2021-03-01",
"name": "[parameters('clusterName')]",
"location": "[parameters('location')]",
"properties": {
"dnsPrefix": "[parameters('dnsPrefix')]",
"agentPoolProfiles": [
{
"name": "agentpool",
"mode": "System",
"osDiskSizeGB": "[parameters('osDiskSizeGB')]",
"count": "[parameters('agentCount')]",
"vmSize": "[parameters('agentVMSize')]",
"osType": "[parameters('osType')]",
"osSKU": "[parameters('osSKU')]",
"storageProfile": "ManagedDisks"
}
],
"linuxProfile": {
"adminUsername": "[parameters('linuxAdminUsername')]",
"ssh": {
"publicKeys": [
{
"keyData": "[parameters('sshRSAPublicKey')]"
}
]
}
}
},
"identity": {
"type": "SystemAssigned"
}
}
],
"outputs": {
"controlPlaneFQDN": {
"type": "string",
"value": "[reference(parameters('clusterName')).fqdn]"
}
}
}
若要將 Azure Linux 新增至現有的 ARM 範本,您需要將 "osSKU": "AzureLinux"
和 "mode": "System"
新增至 agentPoolProfiles
,並將 apiVersion 設定為 2021-03-01 或更新版本 ("apiVersion": "2021-03-01"
)。
部署範本
選取下列按鈕來登入 Azure 並開啟範本。
選取或輸入下列值。
在本快速入門中,請保留 [OS 磁碟大小 GB]、[代理程式計數]、[代理程式 VM 大小]、[OS 類型] 和 [Kubernetes 版本] 的預設值。 請針對下列範本參數提供您自己的值︰
- 訂用帳戶:選取 Azure 訂用帳戶。
- 資源群組:選取 [新建]。 輸入資源群組的唯一名稱 (例如 testAzureLinuxResourceGroup),然後選擇 [確定]。
- 位置:選取一個位置,例如 [美國東部]。
- 叢集名稱:AKS 叢集的唯一名稱,例如 testAzureLinuxCluster。
- DNS 前置詞:為叢集輸入唯一的 DNS 前置詞,例如 myAzureLinuxCluster。
- Linux 管理員使用者名稱:輸入使用 SSH 連線的使用者名稱,例如 azureUser。
- SSH RSA 公開金鑰:複製並貼上 SSH 金鑰組的公開部分 (根據預設,為 ~/.ssh/id_rsa.pub 內容)。
選取 [檢閱 + 建立] 。
建立 Azure Linux 容器主機叢集需要幾分鐘的時間。 請等到叢集成功部署後,再移至下一個步驟。
驗證部署
連線至叢集
若要管理 Kubernetes 叢集,請使用 Kubernetes 命令列用戶端 kubectl。
使用
az aks install-cli
命令在本機安裝kubectl
:az aks install-cli
使用
az aks get-credentials
命令,設定kubectl
連線到 Kubernetes 叢集。 此命令會下載憑證並設定 Kubernetes CLI 以供使用。az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
使用
kubectl get
命令確認叢集的連線。 此命令會傳回叢集節點的清單。kubectl get nodes
下列輸出範例會顯示上一個步驟中建立的三個節點。 確定節點的狀態為就緒:
NAME STATUS ROLES AGE VERSION aks-agentpool-41324942-0 Ready agent 6m44s v1.12.6 aks-agentpool-41324942-1 Ready agent 6m46s v1.12.6 aks-agentpool-41324942-2 Ready agent 6m45s v1.12.6
部署應用程式
Kubernetes 資訊清單檔會定義叢集所需的狀態,例如要執行哪些容器映像。
在本快速入門中,您可以使用資訊清單,建立執行 Azure Vote 應用程式所需的所有物件。 此資訊清單包含兩個 Kubernetes 部署:
- 範例 Azure Vote Python 應用程式。
- Redis 執行個體。
也會建立兩個 Kubernetes Services:
- Redis 執行個體的內部服務。
- 從網際網路存取 Azure Vote 應用程式的外部服務。
建立名為
azure-vote.yaml
的檔案。- 如果您使用 Azure Cloud Shell,可以使用
code
、vi
或nano
建立這個檔案,猶如使用虛擬或實體系統
- 如果您使用 Azure Cloud Shell,可以使用
將下列 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: "kubernetes.io/os": linux containers: - name: azure-vote-back image: mcr.microsoft.com/oss/bitnami/redis:6.0.8 env: - name: ALLOW_EMPTY_PASSWORD value: "yes" 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: "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
如需 YAML 資訊清單檔案的詳細資訊,請參閱部署和 YAML 資訊清單。
使用 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 6s
當 EXTERNAL-IP 位址從暫止變成實際的公用 IP 位址時,請使用 CTRL-C
停止 kubectl
監看式流程。 下列範例輸出顯示指派給服務的有效公用 IP 位址:
azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
若要查看作用中的 Azure 投票應用程式,請開啟網頁瀏覽器連至服務的外部 IP 位址。
選取叢集
如果您不打算繼續執行下列教學課程,為避免 Azure 費用,請清除任何不必要的資源。 使用 az group delete
命令,以移除資源群組和所有相關資源。
az group delete --name testAzureLinuxCluster --yes --no-wait
下一步
在本快速入門中,您已部署 Azure Linux 容器主機叢集。 若要深入了解 Azure Linux 容器主機,並逐步了解完整的叢集部署和管理範例,請繼續進行 Azure Linux 容器主機教學課程。