Azure VMSS ---- PowerShell创建标准镜像的VMSS集群

VMSS的创建可以采用Portal、Powershell、Azure CLI或者Template。

但目前Portal创建有很多限制,本文将介绍如何用PowerShell来创建VMSS的集群。

具体的创建过程有以下几个步骤:

1 创建Resource Group

2 创建Vnet

3 创建Public IP、LoadBalancer

4 创建VMSS

5 增加VMSS的Autoscale规则


创建Resource Group

具体命令如下:

$loc
=
‘chinanorth‘;

$rgname
=
‘hwvmss‘;

New-AzureRmResourceGroup
-Name
$rgname
-Location
$loc
-Force;

二创建Vnet

具体命令如下:

$subnetName
=
‘vlan1‘

$subnet
=
New-AzureRmVirtualNetworkSubnetConfig
-Name
$subnetName
-AddressPrefix
"10.1.1.0/24";

$vnet
=
New-AzureRmVirtualNetwork
-Force
-Name
$rgname
-ResourceGroupName
$rgname
-Location
$loc
-AddressPrefix
"10.1.0.0/16"
-Subnet
$subnet;

$vnet
=
Get-AzureRmVirtualNetwork
-Name
$rgname
-ResourceGroupName
$rgname;

$subnetId
=
$vnet.Subnets[0].Id;

三创建Public IP、LoadBalancer

1 创建Public IP

$pubip
=
New-AzureRmPublicIpAddress
-Force
-Name (‘pubip‘
+
$rgname) -ResourceGroupName
$rgname
-Location
$loc
-AllocationMethod
Dynamic
-DomainNameLabel (‘pubip‘
+
$rgname);

$pubip
=
Get-AzureRmPublicIpAddress
-Name (‘pubip‘
+
$rgname) -ResourceGroupName
$rgname;

2 创建LoadBalancer

$frontendName
=
‘fe‘
+
$rgname

$backendAddressPoolName
=
‘bepool‘
+
$rgname

$probeName
=
‘vmssprobe‘
+
$rgname

$inboundNatPoolName
=
‘innatpool‘
+
$rgname

$lbruleName
=
‘lbrule‘
+
$rgname

$lbName
=
‘vmsslb‘
+
$rgname

$frontend
=
New-AzureRmLoadBalancerFrontendIpConfig
-Name
$frontendName
-PublicIpAddress
$pubip

$backendAddressPool
=
New-AzureRmLoadBalancerBackendAddressPoolConfig
-Name
$backendAddressPoolName

$probe
=
New-AzureRmLoadBalancerProbeConfig
-name
$probeName
-Protocol
Tcp
-Port
80
-IntervalInSeconds
15
-ProbeCount
2

$frontendpoolrangestart
=
22100

$frontendpoolrangeend
=
22200

$backendvmport
=
22

$inboundNatPool
=
New-AzureRmLoadBalancerInboundNatPoolConfig
-Name
$inboundNatPoolName
-FrontendIPConfigurationId `

$frontend.Id -Protocol
Tcp
-FrontendPortRangeStart $frontendpoolrangestart
-FrontendPortRangeEnd
$frontendpoolrangeend
-BackendPort
$backendvmport;

$protocol
=
‘Tcp‘

$feLBPort
=
80

$beLBPort
=
80

$lbrule
=
New-AzureRmLoadBalancerRuleConfig
-Name
$lbruleName `

-FrontendIPConfiguration
$frontend
-BackendAddressPool
$backendAddressPool `

-Probe
$probe
-Protocol
$protocol
-FrontendPort
$feLBPort
-BackendPort
$beLBPort `

-IdleTimeoutInMinutes
15
-LoadDistribution
SourceIP
-Verbose;

$actualLb
=
New-AzureRmLoadBalancer
-Name
$lbName
-ResourceGroupName
$rgname
-Location
$loc `

-FrontendIpConfiguration
$frontend
-BackendAddressPool
$backendAddressPool `

-Probe
$probe
-LoadBalancingRule
$lbrule
-InboundNatPool
$inboundNatPool
-Verbose;

$expectedLb
=
Get-AzureRmLoadBalancer
-Name
$lbName
-ResourceGroupName
$rgname


创建VMSS

$vmssName
=
$rgname;

$adminUsername
=
‘hengwei‘;

$adminPassword
=
"[email protected]";

$PublisherName
=
‘OpenLogic‘

$Offer
=
‘CentOS‘

$Sku
=
‘7.2‘

$Version
=
‘latest‘

$vmNamePrefix
=
‘centosvmss‘

$ipCfg
=
New-AzureRmVmssIPConfig
-Name
‘nic‘ `

-LoadBalancerInboundNatPoolsId
$actualLb.InboundNatPools[0].Id `

-LoadBalancerBackendAddressPoolsId
$actualLb.BackendAddressPools[0].Id `

-SubnetId
$subnetId;

$numberofnodes
=
3

$vmss
=
New-AzureRmVmssConfig
-Location
$loc
-SkuCapacity
$numberofnodes
-SkuName
‘Standard_D1‘
-UpgradePolicyMode
‘automatic‘ `

|
Add-AzureRmVmssNetworkInterfaceConfiguration
-Name
$subnetName
-Primary
$true
-IPConfiguration
$ipCfg `

|
Set-AzureRmVmssOSProfile
-ComputerNamePrefix
$vmNamePrefix
-AdminUsername
$adminUsername
-AdminPassword
$adminPassword `

|
Set-AzureRmVmssStorageProfile
-OsDiskCreateOption
‘FromImage‘
-OsDiskCaching
‘None‘ `

-ImageReferenceOffer
$Offer
-ImageReferenceSku
$Sku
-ImageReferenceVersion
$Version `

-ImageReferencePublisher
$PublisherName

New-AzureRmVmss
-ResourceGroupName
$rgname
-Name
$vmssName
-VirtualMachineScaleSet
$vmss
-Verbose;

五增加VMSS的Autoscale规则

VMSS的Autoscale是在VMSS主机进行性能的监控的基础上,根据VM的性能进行自动的增加VM和减少VM。

有两种方式进行VM性能的监视:

1 Azure Host上取到的信息

通过Azure Monitor取得VM的信息

可以支持的监控内容如以下链接:

https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-supported-metrics

可以看到,在Microsoft.Compute/virtualMachineScaleSets中支持的内容有:

Percentage CPU、Network In、Network Out、Disk Read Bytes、Disk Write Bytes、Disk Read Operations/Sec、Disk Write Operations/Sec这些。

Azure中的VMSS可以采用上面的这些指标来进行AutoScale的控制。

但目前AzureChina还不支持这种模式。

2 Azure VM Diagnostics信息

通过在VM中安装Diagnostics Extension,获得诊断信息,通过这种诊断信息中的VM资源情况进行自动扩展。

目前AzureChina支持这种模式。

具体实现步骤如下:

1 创建一个Storage Account,其中的Table用来收集VM的Dagnostic的信息

创建一个General Purpose的Storage Account,本例子中的名字叫hwvmss。

具体创建过程就不描述了。

2 给已有的VMSS中的VM安装Linux Diagnostics的Extension

$rgname
=
"hwvmss"

$vmssname
=
"hwvmss"

$vmss
=
Get-AzureRmVmss
-ResourceGroupName
$rgname
-VMScaleSetName
$vmssname

$xmlcfg
=
Get-Content
D:\Azure\VMSS\diag_nosubid.xml

$xmlCfg
=
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($xmlCfg))

$storageAccountName
=
"hwvmss"

$storageAccountKey
= (Get-AzureRmStorageAccountKey
-ResourceGroupName
$rgname
-Name
$storageAccountName)[0].Value

$settings
= @{"xmlCfg"
=
$xmlCfg; "storageAccount"
=
$storageAccountName}

$exname
=
"Microsoft.Insights.VMDiagnosticsSettings"

$publisher
=
"Microsoft.OSTCExtensions"

$type
=
"LinuxDiagnostic"

$typeHandlerVersion
=
"2.3"

$protectedSettings
= @{ "storageAccountName"
=
$storageAccountName;"storageAccountKey"
=
$storageAccountKey; "storageAccountEndPoint"
=
"https://core.chinacloudapi.cn"; "endpoint"
=
"table.core.chinacloudapi.cn"}

Add-AzureRmVmssExtension
-VirtualMachineScaleSet
$vmss
-Name
$exname
-Publisher
$publisher
-Type
$type
-TypeHandlerVersion
$typeHandlerVersion
-AutoUpgradeMinorVersion
$true
-Setting
$settings
-ProtectedSetting
$protectedSettings

Update-AzureRmVmss
-VirtualMachineScaleSet
$vmss
-ResourceGroupName
$rgname
-VMScaleSetName
$vmssname

其中diag_nosubid.xml文件的链接如下:

https://hwshare.blob.core.chinacloudapi.cn/soft/diag_nosubid.xml

第62行的用户资源ID需要自己更改。就是上面脚本中$vmss.id的内容。

由于是自己定义,这里的监控信息有非常多,查看xml文件就可以知道,有Memory、Processor、Disk等多种指标。

3 查看存储账户的监控信息

由于VMSS创建时,UpgradePolicyMode选择的是automatic。所以在配置更新了Extension后,VM会自动更新配置。

观察Storage中Table的信息,可以看到我们配置的table:

如果用Azure Blob Explorer,可以看到我们定义的各种指标的信息已经吐到table中了:

有了这些信息就可以添加AutoScale了!

4 添加AutoScale的Seeting

具体脚本如下:

#增加机器的规则

$rule1
=
New-AzureRmAutoscaleRule
-MetricName
"\Processor\PercentUserTime"
-MetricResourceId
$vmss.id
-Operator
GreaterThan
-MetricStatistic
Average
-Threshold
60
-TimeGrain
00:01:00
-TimeWindow
00:05:00
-ScaleActionCooldown
00:05:00
-ScaleActionDirection
Increase
-ScaleActionValue
1

#减少机器的规则

$rule2
=
New-AzureRmAutoscaleRule
-MetricName
"\Processor\PercentUserTime"
-MetricResourceId
$vmss.id
-Operator
LessThan
-MetricStatistic
Average
-Threshold
30
-TimeGrain
00:01:00
-TimeWindow
00:05:00
-ScaleActionCooldown
00:05:00
-ScaleActionDirection
Decrease
-ScaleActionValue
1

$profile1
=
New-AzureRmAutoscaleProfile
-DefaultCapacity
1
-MaximumCapacity
10
-MinimumCapacity
1
-Rules
$rule1,$rule2
-Name
"autoprofile1"

#添加AutoScale的Setting

Add-AzureRmAutoscaleSetting
-Location
$location
-Name
"autosetting1"
-ResourceGroup
$rgname
-TargetResourceId
$vmss.id
-AutoscaleProfiles
$profile1

添加完Autoscale Setting后,可以看到,VMSS中的Instance会自动减少到1台。通过添加stress工具,进行CPU的压力测试,可以看到instance的数量会增加。

总结:

通过PowerShell创建VMSS的集群,通过添加VM的Diagnostic,把Instance的资源消耗信息吐出来。再通过Autoscale进行自动的减少和增加Instance。

时间: 2024-08-24 07:56:09

Azure VMSS ---- PowerShell创建标准镜像的VMSS集群的相关文章

Azure VMSS ---- PowerShell创建自定义镜像的VMSS集群

前面一篇文章介绍了如何用PowerShell创建标准镜像的VMSS集群.http://www.cnblogs.com/hengwei/p/7391178.html 本文将介绍,如何用PowerShell创建自定义镜像的VMSS集群. 1 创建VM,对其进行个性化配置,比如安装httpd,增加Date Disk等,并把此VM捕获成Image 2 以这个Image创建VMSS集群 一 创建并捕获Image 这个操作在前面的文章中也介绍过: http://www.cnblogs.com/hengwei

使用ARM和VMSS创建自动扩展的web集群

在很多的商业场景中,用户的访问,峰值时间都是很难预测的,尤其是做一些市场推广活动和促销的时候,到底部署什么规模的web集群合适,这一直是个问题,部署过量会造成高成本和资源不必要的浪费,部署过少,如果到达峰值,来不及部署,容易造成用户无法访问,用户体验差,交易损失等等,当然更不用提运维人员时刻神经紧绷的实时监测压力情况,以便及时采取措施-- 在云计算技术日新月异的今天,这个场景是非常不和谐的:)VMSS作为Azure新的计算方式,提供了按照压力负载自动扩展收缩,并且同时支持Windows和Linu

windows azure使用powershell创建虚拟机

上篇博文介绍了如何使用powershell控制azure虚拟机的启动和关闭,今天我们介绍下如何使用powershell创建虚拟机 首先,使用powershell登录azure,并查看虚拟机列表 首先,我们需要设定下虚拟机创建的环境 使用get-azuresubscription命令获取订阅名称信息 使用get-azurestorageaccount获取存储账户的名称 我们使用命令set-azuresubscription -subscriptionname "windows azureenter

利用docker镜像配置mysql集群+nextcloud集群+haproxy负载均衡

测试环境: docker xampp 9.1.1 ubuntu 16.0.4 hadoop 2.7 jdk 1.8 一.配置mysql集群 通过docker拉取mysql集群镜像创建容器,包括ndb_mgm(管理节点).ndb_mgmd01.ndbd01(数据节点1).ndbd02(数据节点2).mysqld01(sql节点1).mysqld02(sql节点2) docker run -itd --name ndb_mgmd01 --net=scg --ip 192.166.0.2 -v /ro

SpringCloud02 Eureka知识点、Eureka服务端和客户端的创建、Eureka服务端集群、Eureka客户端向集群的Eureka服务端注册

1 Eureka知识点 按照功能划分: Eureka由Eureka服务端和Eureka客户端组成 按照角色划分: Eureka由Eureka Server.Service Provider.Service Consumer组成 Eureka Server:提供服务注册和发现(即:服务注册中心) Service Provider:服务提供方(即:为其他微服务提供数据资源的服务),将自身的服务信息注册到 Eureka Server 中去供 Service Consumer 使用 Service Co

创建简单WEB高可用集群

环境介绍 node1:192.168.168.201 node2:192.168.168.202 1.配置主机名 [[email protected] ~]# vim /etc/sysconfig/network #编辑节点1主机名配置文件 #编辑 HOSTNAME=node1.linuxpanda.com [[email protected] ~]# hostname node1.linuxpanda.com #主机名立即生效 [[email protected] ~]# vim /etc/s

创建Windows Azure负载集群

创建了web服务之后可以再列表中找到此服务 创建负载集群中的第一个虚拟机 把创建的虚拟机加入到这个服务之中 在网络里面选择front web 前端网络,这个以后会解释azure的网络配置,我是把azure 网络分割成不同区域的网络 可用集群先选无吧,因为后面还会写高可用集群配合负载冗余 虚拟机1结束,照样把虚拟机2也一起创建了 DSM-WEB-001 添加IIS ROLE IIS 首页设置成中秋图,毕竟几天是中秋啊,呵呵,其实为了分辨2个vm的不同IIS 欢迎页面 在虚拟机的DSM-WEB-01

使用ARM模板在Azure中国大规模部署DC/OS集群

容器技术是目前非常流行的技术,尤其是在以Docker作为容器引擎的推动下,让容器的轻量级,可移植,自包含,隔离性等的上了一个新的台阶,目前谈及Dev/Ops,CI/CD很少能够绕过Docker的. Azure在去年就推出了容器服务ACS,以其对开源的全面兼容性,开放性,最全面的编排器(DC/OS, Kubernetes,Swarm)支持而广受好评,但在中国和很多地区,ACS并没有上线,如何在这些地区快速大规模部署容器服务一直是个问题. 而微软更进一步,在11月初,进一步开源了ACS的核心引擎ac

使用ARM模板在Azure中国大规模部署DCOS集群

容器技术是目前非常流行的技术,尤其是在以Docker作为容器引擎的推动下,让容器的轻量级,可移植,自包含,隔离性等的上了一个新的台阶,目前谈及Dev/Ops,CI/CD很少能够绕过Docker的. Azure在去年就推出了容器服务ACS,以其对开源的全面兼容性,开放性,最全面的编排器(DC/OS, Kubernetes,Swarm)支持而广受好评,但在中国和很多地区,ACS并没有上线,如何在这些地区快速大规模部署容器服务一直是个问题. 而微软更进一步,在11月初,进一步开源了ACS的核心引擎ac