将现有的 Azure 虚拟机转换为一个规模集

本教程演示如何使用 Azure CLI 2.0 将虚拟机转换为虚拟机规模集。 还介绍如何在规模集中自动进行虚拟机配置。 有关如何安装 Azure CLI 2.0 的详细信息,请参阅 Azure CLI 2.0 入门。 有关规模集的详细信息,请参阅虚拟机规模集

步骤 1 - 取消设置 VM

使用 SSH 连接到 VM。

使用 Azure VM 代理取消设置 VM 以删除文件和数据。 有关取消设置的详细概述,请参阅捕获 Linux 虚拟机

sudo waagent -deprovision+user -force
exit

步骤 2 - 捕获 VM 的映像

有关捕获的详细概述,请参阅捕获 Linux 虚拟机

Note

在 Azure 中国区使用 Azure CLI 2.0 之前,请先运行 az cloud set -n AzureChinaCloud 来改变云环境。如果想切回国际版 Azure,请再次运行 az cloud set -n AzureCloud

使用 az vm deallocate 解除分配 VM:

az vm deallocate --resource-group myResourceGroup --name myVM

使用 az vm generalize通用化 VM:

az vm generalize --resource-group myResourceGroup --name myVM

使用 az image create 从 VM 资源创建映像:

az image create --resource-group myResourceGroup --name myImage --source myVM

步骤 3 - 创建规模集

获取映像的 ID

az image show --resource-group myResourceGroup --name myImage --query id
"/subscriptions/afbdaf8b-9188-4651-bce1-9115dd57c98b/resourceGroups/vmtest/providers/Microsoft.Compute/images/myImage"

使用 az vmss create 从映像资源创建 VM:

az vmss create --resource-group myResourceGroup --name myScaleSet --image /subscriptions/afbdaf8b-9188-4651-bce1-9115dd57c98b/resourceGroups/vmtest/providers/Microsoft.Compute/images/myImage --upgrade-policy-mode automatic --vm-sku Standard_DS1_v2 --data-disk-sizes-gb 10 --admin-username azureuser --generate-ssh-keys

此命令还附加一个 10GB 的数据磁盘。 请记住,所选的 VM 大小不同(我们使用 Standard_DS1_v2),允许的数据磁盘数量不同。 有关详细信息,请参阅虚拟机大小

规模集完成创建后,连接它。 使用 az vmss list-instance-connection-info 获取 SSH 实例的 IP 地址列表:

az vmss list-instance-connection-info --resource-group myResourceGroup --name myScaleSet
[
  "52.183.00.000:50000",
  "52.183.00.000:50003"
]

现在,你可以连接到虚拟机实例以初始化数据磁盘

ssh -i ~/.ssh/id_rsa.pub -p 50000 azureuser@52.183.00.000

步骤 4 - 初始化数据磁盘

连接到虚拟机时,使用 fdisk 对磁盘进行分区:

(echo n; echo p; echo 1; echo  ; echo  ; echo w) | sudo fdisk /dev/sdc

使用 mkfs 命令将文件系统写入分区:

sudo mkfs -t ext4 /dev/sdc1

装载新磁盘以使其在操作系统中可访问:

sudo mkdir /datadrive ; sudo mount /dev/sdc1 /datadrive

现在可以通过 datadrive 装载点访问磁盘,可使用 ls /datadrive/ 对此进行验证。

结束 SSH 会话。

步骤 5 - 配置防火墙

在防火墙上打一个洞以连接规模集托管的 Web 服务器。 创建规模集时,也会创建负载均衡器,用于 SSH 到单个虚拟机。 要打开端口,需要两条信息(可以使用 Azure CLI 获取)。

  • 前端 IP 地址池
    az network lb show --resource-group myResourceGroup --name myScaleSetLB --output table --query frontendIpConfigurations[0].name

  • 后端 IP 地址池
    az network lb show --resource-group myResourceGroup --name myScaleSetLB --output table --query backendAddressPools[0].name

使用这两个名称,可以打开端口 80

az network lb rule create --backend-pool-name myScaleSetLBBEPool --backend-port 80 --frontend-ip-name loadBalancerFrontEnd --frontend-port 80 --name webserver --protocol tcp --resource-group myResourceGroup --lb-name myScaleSetLB

步骤 6 - 自动配置

数据磁盘需要在每个虚拟机实例上进行配置。 可以使用 CustomScript 扩展自动配置虚拟机。

首先,创建包括磁盘格式命令的 .sh 脚本。

#!/bin/bash

# Setup the data disk
(echo n; echo p; echo 1; echo  ; echo  ; echo w) | fdisk /dev/sdc
fdisk /dev/sdc
mkfs -t ext4 /dev/sdc1
mkdir /datadrive
mount /dev/sdc1 /datadrive

exit 0

接下来,将该脚本文件上传到 CustomScript 扩展可访问的位置。 此处提供了一个副本。

创建一个名为 settings.json 的本地文件,并将下面的 JSON 块放入该文件。 flieUris 属性应设置为上传脚本文件的位置。

{
  "fileUris": ["https://gist.githubusercontent.com/Thraka/ab1d8b78ac4b23722f3d3c1c03ac5df4/raw/3ac6e385010ac675e23ce583ce27b1a752f1b482/prep-vmss.sh"],
  "commandToExecute": "bash prep-vmss.sh" 
}

引用刚刚创建的 settings.json 文件,使用 CustomScript 扩展将此命令部署到规模集。

az vmss extension set --publisher Microsoft.Azure.Extensions --version 2.0 --name CustomScript --resource-group myResourceGroup --vmss-name myScaleSet --settings @settings.json

此扩展在所有当前实例和后续通过缩放创建的任何实例上自动运行。

步骤 7 - 配置自动缩放规则

目前,不能在 Azure CLI 中设置自动缩放规则。 使用 Azure 门户配置自动缩放。

步骤 8 - 管理任务

在规模集的整个生命周期内,可能需要运行一个或多个管理任务。 此外,你可能想要创建可自动执行不同的生命周期任务的脚本,Azure CLI 可提供执行这些任务的快速方法。 以下是一些常见任务。

获取连接信息

az vmss list-instance-connection-info --resource-group myResourceGroup --name myScaleSet

设置实例计数(手动缩放)

az vmss scale --resource-group myResourceGroup --name myScaleSet --new-capacity 4

删除资源组

删除资源组会删除其包含的所有资源。

az group delete --name myResourceGroup

后续步骤

若要详细了解本教程中介绍的一些虚拟机规模集功能,请参阅以下信息: