快速入门:使用 Azure 模板创建 Linux 虚拟机规模集

利用虚拟机规模集,可以部署和管理一组相同的、自动缩放的虚拟机。 可以手动缩放规模集中的 VM 数,也可以定义规则,以便根据资源使用情况(如 CPU 使用率、内存需求或网络流量)进行自动缩放。 然后,Azure 负载均衡器会将流量分配到规模集中的 VM 实例。 在本快速入门中,我们将使用 Azure 资源管理器模板创建虚拟机规模集并部署一个示例应用程序。

如果没有 Azure 订阅,可在开始前创建一个试用帐户

如果选择在本地安装和使用 CLI,本教程要求运行 Azure CLI 2.0.29 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI 2.0

在模板中定义规模集

Azure 资源管理器模板允许部署成组的相关资源。 模板以 JavaScript 对象表示法 (JSON) 编写,可以为应用程序定义整个 Azure 基础结构环境。 在单个模板中,可以创建虚拟机规模集、安装应用程序,以及配置自动缩放规则。 在借助变量和参数的情况下,可以重复使用此模板来更新现有的规模集,或者创建更多的规模集。 可以通过 Azure 门户、Azure CLI 2.0、Azure PowerShell 或持续集成/持续交付 (CI/CD) 管道部署模板。

有关模板的详细信息,请参阅 Azure 资源管理器概述

若要使用模板创建规模集,请定义相应的资源。 虚拟机规模集资源类型的核心部件包括:

属性 属性说明 示例模板值
type 要创建的 Azure 资源类型 Microsoft.Compute/virtualMachineScaleSets
name 规模集名称 myScaleSet
location 要创建规模集的位置 中国北部
sku.name 每个规模集实例的 VM 大小 Standard_A1
sku.capacity 一开始需要创建的 VM 实例数 2
upgradePolicy.mode 更改发生时的 VM 实例升级模式 自动
imageReference 用于 VM 实例的平台或自定义映像 Canonical Ubuntu Server 16.04-LTS
osProfile.computerNamePrefix 每个 VM 实例的名称前缀 myvmss
osProfile.adminUsername 每个 VM 实例的用户名 azureuser
osProfile.adminPassword 每个 VM 实例的密码 P@ssw0rd!

以下示例显示了核心规模集资源定义。 若要自定义规模集模板,可以更改 VM 大小或初始容量,也可以使用其他平台或自定义映像。

{
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  "name": "myScaleSet",
  "location": "China North",
  "apiVersion": "2017-12-01",
  "sku": {
    "name": "Standard_A1",
    "capacity": "2"
  },
  "properties": {
    "upgradePolicy": {
      "mode": "Automatic"
    },
    "virtualMachineProfile": {
      "storageProfile": {
        "osDisk": {
          "caching": "ReadWrite",
          "createOption": "FromImage"
        },
        "imageReference":  {
          "publisher": "Canonical",
          "offer": "UbuntuServer",
          "sku": "16.04-LTS",
          "version": "latest"
        }
      },
      "osProfile": {
        "computerNamePrefix": "myvmss",
        "adminUsername": "azureuser",
        "adminPassword": "P@ssw0rd!"
      }
    }
  }
}

虚拟网络接口卡 (NIC) 配置未显示,这样是为了精简示例。 其他组件(例如负载均衡器)也未显示。 完整的规模集模板显示在本文末尾

添加示例应用程序

若要测试规模集,请安装一个基本的 Web 应用程序。 部署规模集时,可以通过 VM 扩展来完成部署后配置和自动化任务,例如安装某个应用。 可以从 Azure 存储或 GitHub 下载脚本,或者在扩展运行时将脚本提供给 Azure 门户。 若要对规模集应用某个扩展,请将 extensionProfile 节添加到前面的资源示例中。 扩展配置文件通常定义以下属性:

  • 扩展类型
  • 扩展发布者
  • 扩展版本
  • 配置或安装脚本的位置
  • 可在 VM 实例上执行的命令

基于 Linux 的 Python HTTP 服务器模板使用自定义脚本扩展来安装 Bottle(Python Web 框架)和简单的 HTTP 服务器。

两个脚本在 fileUris - (installserver.shworkserver.py)中定义。 从 GitHub 下载这些文件以后,commandToExecute 就可以运行 bash installserver.sh 来安装和配置应用:

"extensionProfile": {
  "extensions": [
    {
      "name": "AppInstall",
      "properties": {
        "publisher": "Microsoft.Azure.Extensions",
        "type": "CustomScript",
        "typeHandlerVersion": "2.0",
        "autoUpgradeMinorVersion": true,
        "settings": {
          "fileUris": [
            "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-bottle-autoscale/installserver.sh",
            "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-bottle-autoscale/workserver.py"
          ],
          "commandToExecute": "bash installserver.sh"
        }
      }
    }
  ]
}

部署模板

可以通过下面的“部署到 Azure”按钮部署基于 Linux 的 Python HTTP 服务器模板。 此按钮可打开 Azure 门户、加载完整的模板,以及提示输入一些参数,例如规模集名称、实例计数和管理员凭据。

将模板部署到 Azure

也可使用 Azure CLI 2.0 通过 az group deployment create 命令安装基于 Linux 的 Python HTTP 服务器,如下所示:

# Create a resource group
az group create --name myResourceGroup --location ChinaNorth

# Deploy template into resource group
az group deployment create \
    --resource-group myResourceGroup \
    --template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-bottle-autoscale/azuredeploy.json

响应提示,为 VM 实例提供规模集名称、实例计数和管理员凭据。 创建规模集和支持资源需要数分钟。

测试规模集

若要规模集的运行方式,请在 Web 浏览器中访问示例 Web 应用程序。 使用 az network public-ip list 命令获取负载均衡器的公共 IP 地址,如下所示:

az network public-ip list \
    --resource-group myResourceGroup \
    --query [*].ipAddress -o tsv

http://publicIpAddress:9000/do_work 格式将负载均衡器的公共 IP 地址输入到 Web 浏览器中。 负载均衡器将流量分发到某个 VM 实例,如以下示例所示:

NGINX 中的默认网页

清理资源

如果不再需要资源组、规模集和所有相关的资源,可以使用 az group delete 命令将其删除,如下所示。 --no-wait 参数会使光标返回提示符处,不会等待操作完成。 --yes 参数将确认是否希望删除资源,不会显示询问是否删除的额外提示。

az group delete --name myResourceGroup --yes --no-wait

后续步骤

在本快速入门中,我们使用 Azure 模板创建了一个 Linux 规模集,并使用自定义脚本扩展在 VM 实例上安装了基本的 Python Web 服务器。 若要了解详细信息,请继续学习有关如何创建和管理 Azure 虚拟机规模集的教程。