zoukankan      html  css  js  c++  java
  • VMSS上用Managed Disk和Data Disk进行自动扩展(1)

    虚拟机自动扩展集(VMSS)是Azure上一个非常强大的功能,在我之前的系列文档中已经做了详细的介绍,在此就不赘述了;我同时也提到,在使用Azure传统存储账号的时候,也存在诸多限制,比如你需要计算每个存储账号下虚拟机的数量以避免IOPS超过性能限制,需要考虑扩展集中虚拟机数量限制,自定义镜像的限制等等:

    在用户进行大规模扩展的设计和使用中,使用传统存储账号非常不方便,所以我们在生产环境下,推荐用户使用在中国区新上线的托管磁盘(managed disk)。托管磁盘是将虚拟机的磁盘管理集中交给后台去做管理,用户不需要关心磁盘的存储, IOPS限制,扩展等琐碎的细节,只需要指定类型,比如高级磁盘或者普通磁盘,剩下的事情交给Azure后台服务去处理,使用托管磁盘可以让你在一个订阅中最大创建10000个磁盘,几千个虚拟机满足大部分扩展性应用的。

    另外一个VMSS的限制是不能使用数据磁盘,但有些应用设计上在做扩展的时候,需要数据磁盘进行数据存储,目前在新版本的VMSS中已经支持Data Disk。

    假如你有以下相对来讲比较复杂的客户需求,你该如何实现?

    1. 虚拟机按照CPU的负载自动扩展收缩
    2. 每个虚拟机有两块数据磁盘,并格式化,挂载,可用
    3. 可以快速的扩展到100台虚拟机
    4. 快速全自动化部署
    5. 可以部署在中国区的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 模板,然后再创建扩展集合。

    1. 删除掉无用的存储变量(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'))]",

    1. VMSS上支持Managed Disk是在ARM Compute资源管理器的API version 2016-04-30-preview以后才支持的,我们需要确保中国的Azure上面API的版本是可用的,首先安装Azure CLI 2.0,登陆中国区Azure:

       

    2. 检查中国区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"这个版本:

       

       

    3. 然后我们来修改API的version,之前的模板API version比较老,我建议修改成相对最新的版本,我修改的版本如下:

       

    4. 需要注意的是,我们虽然对于所有虚拟机的磁盘不再需要传统存储账号进行管理,但对于存储LinuxDiag的诊断信息,我们依然需要Azure Storage Table来进行存储,因此上resource上的storage部分的定义只需要定义diagnostic storage account即可:

       

    5. 删除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'))]"

       

    6. 同时删除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"

      },

    7. 为扩展及中的虚拟机添加两个书磁盘,每个1023GB,注意在一个虚拟机中lun号必须唯一:

       

       

    8. 修改模板的最后一步,也是很重要的一步,就是你在加载了数据磁盘给Linux虚拟机以后,其实是无法直接使用的, 你需要分区,格式化,挂载才能使用,这部分实际是需要客户自己写代码和脚本完成的,不用担心,我已经写了一个脚本,来自动化完成这个工作,脚本已经放在Github上了,需要在模板中添加定制化脚本运行部分:

       

       

       

  • 相关阅读:
    Codechef EDGEST 树套树 树状数组 线段树 LCA 卡常
    BZOJ4319 cerc2008 Suffix reconstruction 字符串 SA
    Codechef STMINCUT S-T Mincut (CodeChef May Challenge 2018) kruskal
    Codeforces 316G3 Good Substrings 字符串 SAM
    Codechef CHSIGN Change the Signs(May Challenge 2018) 动态规划
    BZOJ1396 识别子串 字符串 SAM 线段树
    CodeForces 516C Drazil and Park 线段树
    CodeForces 516B Drazil and Tiles 其他
    CodeForces 516A Drazil and Factorial 动态规划
    SPOJ LCS2
  • 原文地址:https://www.cnblogs.com/cloudapps/p/7364390.html
Copyright © 2011-2022 走看看