• ARM模式下使用自定义镜像部署VM


    目前在中国区的Azure新portal上面, 暂时不支持直接将用户的虚拟机创建为虚拟机镜像,那么在ARM模式下如何捕获虚拟机为用户自定义镜像?而且由于managed disk没有上线,用户创建的虚拟机只能和镜像在一个存储账号下,如何快速的将用户自定义镜像拷贝到其他存储账号,并且快速创建VM?本文就这些常见问题给出一个简单易用的快速解决办法

    本文介绍的主要主题如下:

    • Linux/Mac下如何使用Azure CLI捕获ARM下虚拟机镜像
    • 使用ARM模板使用自定义镜像快速创建虚拟机
    • 通过Azure CLI在不同账号使用自定义镜像创建虚拟机

    使用Azure CLI捕获Linux镜像

    1.首先ARM模式下创建一台Linux虚拟机:

    2.目前中国区Azure并不支持Azure CLI2.0,所以请注意安装 CLI 1.x。Linux命令行下安装Azure Command Line:

    sudo npm install -g azure-cli

    3.安装完成后,检查当前Azure CLI的版本:

    Azure --version

    4.登录Azure China账户,我们使用非交互式登录,-u跟你的用户名,可直接写-p后加密码,-e需要指定是中国Cloud:

    azure login -u USERNAME -p PASSWORD -e AzureChinaCloud

    5.对于已经创建的Linux VM,为了捕获镜像,我们首先需要通用化,也就是把一些该虚拟机特有的个人数据,UUID等清除,便于大规模部署,相当于Windows服务器中的sys-prep操作,使用SSH登录到该Linux虚拟机,执行:

    sudo waagent -deprovision+user

    6. 回到Azure Command Line界面下,我们切换到ARM模式,然后停止这个模板VM,并取消分配:

    azure config mode arm

    azure vm deallocate -g myubuntueast -n myvmubuntu

    7. 使用Azure Command Line通用化VM:

    azure vm generalize -g myubuntueast -n myvmubuntu

    8.然后使用azure命令capture来捕获VM为自定义镜像了:

    azure vm capture -g myubuntueast -n myvmubuntu -p myvmubuntu -t myTemplate.json

     

    模板文件中存放着OS VHD文件地址,保存以便后续操作使用。

    9.创建完成后,使用Storage Explorer查看,就可以看到在System目录下,创建了两个文件,一个VHD,一个json文件:

    使用ARM模板从自定义镜像创建VM

     

    1. 自定义镜像创建完成后,在ARM模式下,最简单的方式,就是使用ARM模板来创建虚拟机,那么我们可以使用QuickStart里面的模板101-vm-from-user-image 来创建虚拟机,首先使用Git克隆这个repo:

     

    2.将101-vm-from-user-image目录拷贝到根目录,可以看到里面有6个文件,其中azuredeploy.json是主要文件,parameter是参数文件, newvnet是一个嵌套的模板,创建新的vnet,而existingvnet是处理已有的vnet:

     

    3.我们需要修改的是azuredeploy.parameters.json文件,该文件包含了新创建VM的模板镜像地址,用户名,密码,虚拟机网络等信息,镜像的存储URL可以从捕获VM产生的myTemplate.json文件中获得,例如打开该模板文件,我的osDisk地址是:

    "uri": https://myvmlinux.blob.core.chinacloudapi.cn/system/Microsoft.Compute/Images/vhds/myvmubuntu-osDisk.c8102a9a-f110-452d-b30a-e4735c2841f4.vhd

    4.修改parameter文件,其中比较重要的部分是镜像地址如下,另外我们在本例中使用已有的虚拟网络,已有的虚拟网络子网:

    "osDiskVhdUri": { "value": https://myvmlinux.blob.core.chinacloudapi.cn/system/Microsoft.Compute/Images/vhds/myvmubuntu-osDisk.c8102a9a-f110-452d-b30a-e4735c2841f4.vhd}

    "newOrExistingVnet": {

    "value": "existing"},

    "n"newOrExistingVnetName": {

    "value": "myubuntueast-vnet"},

    "n"newOrExistingSubnetName": {

    "value": "default"},

    5.使用Azure CLI来进行模板部署,使用客户自定义的镜像:

    azure group deployment create --name="mylinuxcustodeployment" --resource-group="myubuntueast" --template-file="azuredeploy.json" --parameters-file="azuredeploy.parameters.json"

     

    部署成功后,可以看到输入相关的信息如下:

     

     

    6. 登录Azure新portal,查看新创建的虚拟机状态及组件:

    7. 最后使用SSH连接到这个Linux VM做个简单测试,可以看到,可以成功连接到该虚拟机:

     

    注:这个末班中没有定义NSG,如果正式环境里面,请添加相关NSG配置进行虚拟机创建。

    使用Azure CLI通过自定义镜像创建VM

    我们创建了虚拟机镜像作为标准模板后,需要分发到不同的存储账号进行虚拟机的创建,那么如何快速的拷贝镜像呢?当然可以使用azcopy等工具 ,但如果只是测试或者镜像数量比较少,建议使用Storage Explorer,该工具是图形化界面,拷贝加速,并且适用于Linux,windows和Mac平台,下载地址:

    http://storageexplorer.com/

    1. 找到你的镜像目录,该目录在你捕获镜像的时候,创建了一个system容器,并且适用Microsoft.Compute命名:

    在当前目录下选择则该目录,单击菜单上的copy,选择目的存储目录,单击paste,就可以看到整个目录开始拷贝,及时你有多个VHD文件,也会同时拷贝过去:

    2. 拷贝完自定义镜像以后,找到该镜像新位置的URL,然后就可以用Azure CLI来快速创建VM了,在本例中,我们使用已创建的资源组,已经存在的虚拟网络和子网,进行虚拟机创建,那么在开始创建之前,需要先创建一个公网IP和NIC:

    azure network public-ip create myubuntueast myPublicCust2IP -l "chinaeast"

    创建网络安全组并且创建22端口的SSH规则:

    #Create NSG group    

    azure network nsg create --resource-group myubuntueast --location chinaeast

    --name myNetworkSecurityGroup

    azure network nsg rule create --resource-group myubuntueast

    --nsg-name myNetworkSecurityGroup --name myNetworkSecurityGroupRuleSSH

    --protocol tcp --direction inbound --priority 1000 --source-address-prefix '*'

    --source-port-range '*' --destination-address-prefix '*' --destination-port-range 22

    --access allow

    azure network nic create myubuntueast myCust3NIC -k default

         -m myubuntueast-vnet

         --network-security-group-name myNetworkSecurityGroup

         -p myPublicCust2IP -l "chinaeast"

    3. 使用Azure CLI,定制化镜像,和之前创建的NIC和Pub IP来创建虚拟机:

    azure vm create -g myubuntueast -n myCustVM3 -l "chinaeast" -y Linux -z Standard_D3

    -u azureuser -p Azure123! -f myCust3NIC

    -d https://myvmstorage.blob.core.chinacloudapi.cn/vhds/myCustVM3.vhd

    -Q "https://myvmstorage.blob.core.chinacloudapi.cn/system/Microsoft.Compute/Images/vhds/myvmubuntu-osDisk.c8102a9a-f110-452d-b30a-e4735c2841f4.vhd"

    创建完成后,检查Azure的管理界面,可以看到虚拟机已经正常运行:

    4. 使用SSH登录到虚拟机进行测试,可以看到一切正常,我们在之前NSG的设置中,已经打开了SSH端口:

  • 相关阅读:
    在GitHub上删除项目后,在Android Studio上传项目依然提示project is already on github
    Android Studio 使用Intent实现页面的跳转(带参数)
    Android Studio 点击两次返回键,退出APP
    Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 --简易版
    Eclipse 分屏显示同一个代码文件
    关于线上问题处理心得分享
    关于敏捷开发
    Python语言程序设计学习 之 了解Python
    关于测试
    C# 使用FileUpload控件上传图片,将文件转换成二进制进行存储与读取
  • 原文地址:https://www.cnblogs.com/cloudapps/p/6634773.html
Copyright © 2020-2023  润新知