Skip to main content

使用Azure Cli创建虚拟机规模集和部署可缩放应用

分类:  Azure虚拟机 标签:  #基础 #Azure入门 #Linux #虚拟机 发布于: 2023-05-27 21:18:35

虚拟机规模集运行和管理一个可以自动缩放的虚拟机集合,需要注意的这个集合里的虚拟机配置都是一致的。在虚拟机规模集中你可以手动缩放,也可以定义一些规则自动来缩放,例如通过资源的利用率,CPU、内存、或者网络的流量等等。本教程主要知识点:

  • 使用Cloud-init创建一个用于缩放的应用。

  • 创建虚拟机规模集

  • 添加或者减少虚拟机规模集的实例数

  • 创建自动缩放规则

  • 查看虚拟机规模集的链接信息

  • 在虚拟机规模集中使用数据磁盘。

在开始之前我们还是先熟悉一下虚拟机规模集的基本概念。虚拟机规模集主要用于管理同一个配置的,自动缩放的虚拟机。在虚拟机规模集中的虚拟机是分布创建,同时也使用了失效域和更新域两个概念。创建在虚拟机规模集中的虚拟机可以通过定义自动缩放的规则进行缩放,这些规则主要是依赖于监控的指标,例如CPU的负载,内存的使用量,或者网络流量等等。

如果使用Azure 市场的镜像,一个虚拟机规模集可以容纳最多1000台虚拟机,但是如果是使用自定义的镜像,那么最多只能创建300台虚拟机。

下面我们开始本教程主要内容。

创建一个缩放的App

本教程创建缩放应用的方法不适合用于产线环境,对于产线环境您可以考虑使用自定义虚拟机镜像。这里仅仅是用于测试,我们用cloud-init脚本来配置应用。

请创建一个名为:cloud-init.txt的配置文件,内容如下:

#cloud-config
package_upgrade: true
packages:
- nginx
- nodejs
- npm
write_files:
- owner: www-data:www-data
- path: /etc/nginx/sites-available/default
content: |
server {
listen 80;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

- owner: azureuser:azureuser
- path: /home/azureuser/myapp/index.js
content: |
var express = require('express')
var app = express()
var os = require('os');
app.get('/', function (req, res) {
res.send('Hello World from host ' + os.hostname() + '!')
})
app.listen(3000, function () {
console.log('Hello world app listening on port 3000!')
})

runcmd:
- service nginx restart
- cd "/home/azureuser/myapp"
- npm init
- npm install express -y
- nodejs index.js

保存该文件。

创建一个虚拟机规模集

请使用如下的命令来创建虚拟机规模集:

先创建一个资源组

az group create --name myResourceGroupScaleSet --location chinaeast2

然后创建虚拟机规模集:

az vmss create \
--resource-group myResourceGroupScaleSet \
--name myScaleSet \
--image UbuntuLTS \
--upgrade-policy-mode automatic \
--custom-data cloud-init.txt \
--admin-username azureuser \
--generate-ssh-keys

需要注意的是在创建的时候我们已经使用了cloud-init的脚本进行虚拟机的配置了。因此当创建完成之后,虚拟机规模集就已经是可用的状态了。

因此下一步我们需要开放访问,让外部用户能够访问到虚拟机规模集中的业务。

需要注意的是随着虚拟机规模集的创建,同时也会创建一个负载均衡,因此我们需要在负载均衡上设定访问规则。设定访问规则的方式如下:

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

设定完成后,测试应用如下:

先拿到公共的IP:

az network public-ip show \
--resource-group myResourceGroupScaleSet \
--name myScaleSetLBPublicIP \
--query [ipAddress] \
--output tsv

通过浏览器访问,结果如下:


管理虚拟机规模集

有时候可能需要编写一些自动脚本来管理虚拟机规模集,使用Azure CLI也能够很方便的进行一些管理任务。

浏览虚拟机规模集中的虚拟机

使用如下的命令查看虚拟机规模集中的虚拟机实例:

az vmss list-instances \
--resource-group myResourceGroupScaleSet \
--name myScaleSet \
--output table

输出结果可能如下:

InstanceId  LatestModelApplied    Location    Name          ProvisioningState    ResourceGroup            VmId
------------ -------------------- ---------- ------------ ------------------- ----------------------- ------------------------------------
1 True eastus myScaleSet_1 Succeeded MYRESOURCEGROUPSCALESET c72ddc34-6c41-4a53-b89e-dd24f27b30ab
3 True eastus myScaleSet_3 Succeeded MYRESOURCEGROUPSCALESET 44266022-65c3-49c5-92dd-88ffa64f95da

手动添加或者减少节点

使用如下的命令来查看规模集中的虚拟机情况:

az vmss show \
--resource-group myResourceGroupScaleSet \
--name myScaleSet \
--query [sku.capacity] \
--output table

查看当前的虚拟机情况后,可以使用如下的命令来进行缩放:

az vmss scale \
--resource-group myResourceGroupScaleSet \
--name myScaleSet \
--new-capacity 3

得到虚拟机的链接信息

由于虚拟机规模集创建之后,有一个负载均衡,因此想要链接到具体的虚拟机,先必须得到链接信息,使用如下的信息得到必要的信息:

az vmss list-instance-connection-info \
--resource-group myResourceGroupScaleSet \
--name myScaleSet

使用数据磁盘

我们之前也讨论过如何使用数据磁盘,对于虚拟机规模集,我们也可以使用数据磁盘,可以使用如下的命令在创建虚拟机规模集添加数据磁盘:

az vmss create \
--resource-group myResourceGroupScaleSet \
--name myScaleSetDisks \
--image UbuntuLTS \
--upgrade-policy-mode automatic \
--custom-data cloud-init.txt \
--admin-username azureuser \
--generate-ssh-keys \
--data-disk-sizes-gb 50

对于已经创建好的虚拟机规模集使用如下的命令添加数据磁盘:

az vmss disk attach \
--resource-group myResourceGroupScaleSet \
--name myScaleSet \
--size-gb 50 \
--lun 2

使用如下的命令卸载磁盘

az vmss disk detach \
--resource-group myResourceGroupScaleSet \
--name myScaleSet \
--lun 2