VMSS上用Managed Disk和Data Disk进行自动扩展(1)
虚拟机自动扩展集(VMSS)是Azure上一个非常强大的功能,在我之前的系列文档中已经做了详细的介绍,在此就不赘述了;我同时也提到,在使用Azure传统存储账号的时候,也存在诸多限制,比如你需要计算每个存储账号下虚拟机的数量以避免IOPS超过性能限制,需要考虑扩展集中虚拟机数量限制,自定义镜像的限制等等:
在用户进行大规模扩展的设计和使用中,使用传统存储账号非常不方便,所以我们在生产环境下,推荐用户使用在中国区新上线的托管磁盘(managed disk)。托管磁盘是将虚拟机的磁盘管理集中交给后台去做管理,用户不需要关心磁盘的存储, IOPS限制,扩展等琐碎的细节,只需要指定类型,比如高级磁盘或者普通磁盘,剩下的事情交给Azure后台服务去处理,使用托管磁盘可以让你在一个订阅中最大创建10000个磁盘,几千个虚拟机满足大部分扩展性应用的。
另外一个VMSS的限制是不能使用数据磁盘,但有些应用设计上在做扩展的时候,需要数据磁盘进行数据存储,目前在新版本的VMSS中已经支持Data Disk。
假如你有以下相对来讲比较复杂的客户需求,你该如何实现?
- 虚拟机按照CPU的负载自动扩展收缩
- 每个虚拟机有两块数据磁盘,并格式化,挂载,可用
- 可以快速的扩展到100台虚拟机
- 快速全自动化部署
- 可以部署在中国区的Azure上
这个过程相对来说比较复杂,本文讨论如何基于传统存储账号的VMSS ARM模板进行修改,使用磁盘脚本,Azure CLI 2.0进行基于管理磁盘和数据磁盘的VMSS大规模部署。
用于本文的之前介绍的我的Linux VMSS Autoscale 的模板地址如下:
https://github.com/kingliantop/azurelabs/tree/master/AzureChinaARMTemplate/VMSS-Linux-Autoscale
基于该模板,我们需要做一些修改将使用传统存储账号的VMSS转换为使用Managed Disk和数据磁盘的VMSS 模板,然后再创建扩展集合。
- 删除掉无用的存储变量(variables)
"storageAccountType": "Standard_LRS",
"newStorageAccountSuffix": "[concat(variables('namingInfix'), 'sa')]",
"uniqueStringArray": [
"[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '0')))]",
"[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '1')))]",
"[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '2')))]",
"[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '3')))]",
"[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '4')))]"
],
"vhdContainerName": "[concat(variables('namingInfix'), 'vhd')]",
"osDiskName": "[concat(variables('namingInfix'), 'osdisk')]",
"saCount": "[length(variables('uniqueStringArray'))]",
- VMSS上支持Managed Disk是在ARM Compute资源管理器的API version 2016-04-30-preview以后才支持的,我们需要确保中国的Azure上面API的版本是可用的,首先安装Azure CLI 2.0,登陆中国区Azure:
- 检查中国区Compute provider的API版本号:
az provider show --namespace Microsoft.Compute
可以看到虚拟机扩展集合和虚拟机都支持"2016-04-30-preview","2016-08-30","2017-03-30"等多个版本号,而Insight provider的Autoscalesetting最高支持"2015-04-01"这个版本:
- 然后我们来修改API的version,之前的模板API version比较老,我建议修改成相对最新的版本,我修改的版本如下:
- 需要注意的是,我们虽然对于所有虚拟机的磁盘不再需要传统存储账号进行管理,但对于存储LinuxDiag的诊断信息,我们依然需要Azure Storage Table来进行存储,因此上resource上的storage部分的定义只需要定义diagnostic storage account即可:
- 删除VMSS中虚拟机扩展集磁盘部分对于传统存储的依赖关系:
"type": "Microsoft.Compute/virtualMachineScaleSets",
"name": "[variables('namingInfix')]",
"location": "[resourceGroup().location]",
"apiVersion": "[variables('computeApiVersion')]",
"dependsOn": [
"[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray')[0], variables('newStorageAccountSuffix'))]",
"[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray')[1], variables('newStorageAccountSuffix'))]",
"[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray')[2], variables('newStorageAccountSuffix'))]",
"[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray')[3], variables('newStorageAccountSuffix'))]",
"[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray')[4], variables('newStorageAccountSuffix'))]",
"[concat('Microsoft.Network/loadBalancers/', variables('loadBalancerName'))]",
"[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
- 同时删除OSDisk中有关Container的配置,这部分都会由Managed Disk来管理:
"osDisk": {
"vhdContainers": [
"[concat('https://', variables('uniqueStringArray')[0], variables('newStorageAccountSuffix'), '.blob.core.chinacloudapi.cn/', variables('vhdContainerName'))]",
"[concat('https://', variables('uniqueStringArray')[1], variables('newStorageAccountSuffix'), '.blob.core.chinacloudapi.cn/', variables('vhdContainerName'))]",
"[concat('https://', variables('uniqueStringArray')[2], variables('newStorageAccountSuffix'), '.blob.core.chinacloudapi.cn/', variables('vhdContainerName'))]",
"[concat('https://', variables('uniqueStringArray')[3], variables('newStorageAccountSuffix'), '.blob.core.chinacloudapi.cn/', variables('vhdContainerName'))]",
"[concat('https://', variables('uniqueStringArray')[4], variables('newStorageAccountSuffix'), '.blob.core.chinacloudapi.cn/', variables('vhdContainerName'))]"
],
"name": "[variables('osDiskName')]",
"caching": "ReadOnly",
"createOption": "FromImage"
},
- 为扩展及中的虚拟机添加两个书磁盘,每个1023GB,注意在一个虚拟机中lun号必须唯一:
- 修改模板的最后一步,也是很重要的一步,就是你在加载了数据磁盘给Linux虚拟机以后,其实是无法直接使用的, 你需要分区,格式化,挂载才能使用,这部分实际是需要客户自己写代码和脚本完成的,不用担心,我已经写了一个脚本,来自动化完成这个工作,脚本已经放在Github上了,需要在模板中添加定制化脚本运行部分:
转载于:https://www.cnblogs.com/cloudapps/p/7364390.html
VMSS上用Managed Disk和Data Disk进行自动扩展(1)相关推荐
- aws 性能_AWS上的应用程序自动扩展–选项和对性能的影响
aws 性能 至关重要的是扩展软件应用程序,以避免由于网站的客户群或需要处理大型数据集的应用程序等导致的工作负载增加而导致性能瓶颈的情况.云服务提供商通常是访问其他应用程序的最佳方法随需应变的资源,可 ...
- AWS上的应用程序自动扩展–选项及其对性能的影响
扩展软件应用程序是至关重要的,以避免由于网站的客户群或需要处理大量数据集的应用程序等增加而导致工作负载增加的性能瓶颈.云服务提供商通常是访问其他应用程序的最佳方法随需应变的资源,可根据应用程序的负载变 ...
- 安卓system镜像分区_如何完全备份android系统上的system分区和data分区
安卓的系统备份在很多场合下可能会用到,下面这个python的脚本,可以用来备份整个的data分区:将所有data分区的文件和目录打包到data.zip,并生成recovery的专用edify脚本到up ...
- 重装系统的时候遇到 Windows cannot be installed to this disk.the selected disk is of ····
重装系统出现 Windows cannot be installed to this disk 或 Windows无法安装到这个磁盘 原因 解决方法 原文地址: https://zhangzhiche ...
- Spring Data JPA 禁止自动更新
公司的项目后台架构是SpringBoot + Spring Date JPA,采用MySQL数据库.在工作刚开始时就遇到了一个奇怪的现象.在采用Date JPA查询完数据库之后,若改变了查询出的对象属 ...
- 在Linux上安装Gearman及配置使用Gearman的PHP扩展环境
在Linux上安装Gearman及配置使用Gearman的PHP扩展环境. 先介绍安装 Gearman . 1. 先安装依赖库 # yum install -y boost-devel gperf l ...
- 网页服务器日期格式,网站模板如何上传到主机上,用django定义自动插入的时间示格式如何调整...
网站模板如何上传到主机上?用django定义自动插入的时间示格式如何调整?php如何调用html文件,我的PHP文件是网页整体的模板,中途想放html文件,谁有好方法?下面就来一起看看吧~ 网站模板如 ...
- emacs python plugin_Windows上配置Emacs来开发Python及用Python扩展Emacs
Windows下配置Emacs来开发Python去年在网上偶然的一个机会知道了Emacs的存在,在周围前辈们都在夸赞Sublime好用的时候,喜欢跟大众唱反调的我,突然觉得如果能用Emacs来编代码, ...
- datav本地部署 java,Spring Boot对Spring Data JPA的自动配置
一 点睛 Spring Boot对Spring Data JPA的自动配置放置在如下路径: 二 源码分析 1 JpaRepositoriesAutoConfiguration类分析 @Configur ...
最新文章
- 【进大厂大数据爬虫技术核心难点】纯前端开发的爬虫程序,很多BAT技术大咖都为之惊叹
- 到底什么时候不应该使用机器学习?
- SQL Server查询备份日期和备份设备名
- oc怎么添加win引导_OC图像纹理节点和透明贴图的使用方法
- 【数据竞赛】2020 Kaggle 10大竞赛方案汇总
- dos启动盘访问硬盘
- linux mysql udf打包_Linux下MySQL 5.1编写UDF 并运行(Install)获取当前时间的毫秒数...
- mysql 5.7 主从切换_mysql5.7 主从复制的正常切换【转】
- turtle 函数 方法_学python第十一节:turtle深入 了解
- C语言——生命游戏(初始
- MVC传递Model
- 关于提示对话框的总结
- 花了很长时间看完了 java编程思想
- 中国移动微处理器CM32M101A介绍
- xampp套件使用php,php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手),xampp安装使用...
- 微信小程序登陆注册界面前后端完整代码展示
- a与a的共轭转置相乘_线性代数A矩阵乘以A的转置的含义或者几何意义
- 移动端车牌识别sdk如何开发app
- fiddler限速_基于fiddler来模拟限速
- 关于如何去实现百度的自动发帖功能猜想
热门文章
- 【调试基础】Part 3 Window操作系统
- 数论总结 (常用定理+ 模板)
- ASP.NET Core WebApi 返回统一格式参数
- C# 添加xml节点多了xmlns属性问题
- QT小例子 ---文件查找
- 利用MOG2背景模型提取运动目标的OpenCV代码
- OpenCV中cvADDS()为啥第二个参数要是CvScalar类型?掩码mask=NULL又是何意?
- linux存储--mmap与sendfile(十七)
- python批量读取grib_windows python读取grib2数据
- 正则表达式(RegularExpression)