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 $actualLb = New-AzureRmLoadBalancer -Name $lbName `
  -ResourceGroupName $rgname `
  -Location $loc-FrontendIpConfiguration $frontend `
  -BackendAddressPool $backendAddressPool-Probe $probe  `
  -LoadBalancingRule $lbrule `
  -InboundNatPool $inboundNatPool $expectedLb = Get-AzureRmLoadBalancer -Name $lbName `
  -ResourceGroupName $rgname

四创建VMSS

$vmssName =  $rgname;

$adminUsername = 'hengwei';
$adminPassword = "xxxxxxx"; $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

五增加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。

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

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

    前面一篇文章介绍了如何用PowerShell创建标准镜像的VMSS集群.http://www.cnblogs.com/hengwei/p/7391178.html 本文将介绍,如何用PowerShel ...

  2. docker镜像创建redis5.0.3容器集群

    拉取redis5.0.3镜像 # docker pull daocloud.io/library/redis:5.0.3 [root@localhost ~]# docker pull daoclou ...

  3. suse 12 二进制部署 Kubernetets 1.19.7 - 第01章 - 创建CA证书和kubectl集群管理命令

    文章目录 1.kubernetes集群部署 1.0.创建CA证书和秘钥 1.0.0.安装cfssl工具 1.0.1.创建根证书 1.0.2.创建证书签名请求文件 1.0.3.生成CA证书和秘钥 1.0 ...

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

    在很多的商业场景中,用户的访问,峰值时间都是很难预测的,尤其是做一些市场推广活动和促销的时候,到底部署什么规模的web集群合适,这一直是个问题,部署过量会造成高成本和资源不必要的浪费,部署过少,如果到 ...

  5. Docker镜像配置redis集群

    redis版本:3.2.3 架构: 3节点redis集群,并为每个节点设置一个备用节点,共6个节点 1.安装redis镜像 docker load < docker.redis.tar.gz 2 ...

  6. kubernetes之二 使用minikube创建单节点k8s本地集群

    使用Minikube来运行kubernetes集群是最简单.快捷的途径.Minikube是一个构建单节点集群的工具,对于测试Kubernetes和本地开发应用都非常有用.官方安装minikube教程请 ...

  7. 仅需60秒,使用k3s创建一个多节点K8S集群!

    作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...

  8. kubernetes 创建用户配置文件来访问集群API

    创建一个账号 kubectl create serviceaccount def-ns-admin 绑定集群权限 kubectl create rolebinding def-ns-admin --c ...

  9. 使用Docker方式创建3节点的Etcd集群

    一.简要说明 二.运行容器 三.验证集群 四.运行截图 五.参考链接 一.简要说明     参考etcd官网文档, 在node1.node2.node3三个节点上,分别运行etcd容器,创建etcd集 ...

随机推荐

  1. PHP字符串函数大全

    无论哪种编程语言,字符串操作都是一个重要的基础,往往简单而重要.PHP为我们提供了大量的字符串操作函数,功能强大,使用也比较简单.在这里结合实例总结分析PHP字符串函数的功能. 1.addcslash ...

  2. sqlserver 实时同步(发布订阅)

    配置发布订阅手册 不同版本须知:https://www.sqlmanager.net/en/articles/1548 向后兼容性:参考https://docs.microsoft.com/zh-cn ...

  3. ubuntu/centos printk 终端中不能打印信息及解决办法

    今天用ubuntu来调试信息,printk死活打印不出信息,即使把级别跳到<0>,即KERN_ALERT也不行,后再搜了好长时间网络, 这个地址:http://bbs.chinaunix. ...

  4. MySql基础学习-库表操作

    1.创建数据 CREATE DATABASE mysql_study; 2.连接数据库 USE mysql_study 3.创建数据表 CREATE TABLE person( id int auto ...

  5. review10

    public int indexOf(String s); 字符串的索引位置时从0开始的(只有一个参数时),从当前字符串的头开始检索字符串s,并返回首次出现s的索引位置.如果没有检测到字符串s,该方法 ...

  6. ActionContext实现原理

    StrutsPrepareAndExecuteFilter [http://www.tuicool.com/articles/NVNbYn] struts2 和 struts1 的一个重要区别就是它进 ...

  7. OpenGL的镶嵌

    镶嵌(tessellation)是将凹边形分割或者是凸边形相交边组成的多边形.因为OpenGL只接受凸多边形的渲染,这些非凸多边形必须在绘制前进行镶嵌. 上图分别为凹四边形.中间有洞及自交的多边形. ...

  8. 解决CentOS 6环境时区、日期、时间同步方法

    有些时候我们在选择的VPS服务商提供的VPS主机方案安装系统.安装建站环境之后就直接上马网站,但是我们会有发现发布的文章或者有些时候设置的自动执行脚本时间与我们实际的时间不符合.甚至有些程序是需要与本 ...

  9. 交换排序—冒泡排序(Bubble Sort)算法原理以及Java实现

    基本思想: 在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将 ...

  10. BW信息STMS传输

    项目时先接过来的.前面的人建了很多数据源,信息对象.我也建了不少.最后分成三个包.非常混乱,信息对象不在一个包里.导入报错.先后顺序也没有逻辑.可为难我了. 本来想着是全部释放掉,然后在传输连接收集自 ...