下图描述了总体的虚拟机映像的VHD生成,上传以及发布到 Azure 镜像市场的全过程:
具体步骤如下:
- 在本地计算机(Windows平台)上安装Hyper-V,并安装您所需要的虚拟机操作系统
- 在此操作系统上安装和配置您要发布的应用软件产品
- 在本地计算机上制作VHD为映像
- 将制作好的VHD通过PowerShell上传到Azure存储账号上,并获取VHD映像在Azure上的存储位置(url地址)
- 申请预发布环境,将第四步中Azure上的VHD映像部署到测试发布环境进行验证
- 正式发布,登录到Azure 镜像市场,并根据发布流程将已经测试完毕的VHD发布到 Azure Azure 镜像市场
第一步:准备
-
检查操作系统版本兼容性
如操作系统为Linux,请确认所安装的Linux系统版本是Azure所支持的,具体请参考:Azure支持的Linux版本 -
本机安装Hyper-V
确认Hyper-V在您的Windows系统中安装并可以使用。
关于Hyper-V在各版本Windows上的安装和配置,请参考: 安装Hyper-V并创建虚拟机 -
本机安装了PowerShell命令行工具
获取Azure的配置文件(过程中需要输入azure的账号密码),并保存到磁盘。
Get-AzurePublishSettingsFile –Environment azurechinacloud
导入账户认证信息,路径用引号(为上一步骤中的配置文件路径)。
Import-AzurePublishSettingsFile <PathToFile>
第一步完成后,即可开始制作映像,制作VHD主要包括两种方式,第一种是通过本地Hyper-V虚拟机建立VHD,第二种是直接在Azure制作VHD。以下以本地建立VHD为例进行介绍:
第二步:从本机制作Linux应用程序VHD映像
本节我们以CentOS6.x为例进行介绍,其他Linux操作系统的VHD制作可参考官方文档:制作和上载Linux虚拟机vhd。
Hyper-V支持的操作系统英文文档:Hyper-V支持的CentOS和RedHat版本)
CentOS6.x 的vhd磁盘制作英文官方文档:基于CentOS的vhd虚拟机制作过程。
-
安装CentOS 6.5 Linux虚拟机和应用软件
您需要通过Hyper-V安装Linux虚拟机。注意在安装过程中,一定要选择后续应用软件所需要的各个组件,比如c/c++编译器或cmake或KDE图形界面等,虚拟机安装完成后需要进行系统设置使得Linux可以连接外网。
Linux虚拟机安装完毕后,继续安装和配置应用软件。 -
网络和网卡配置
a)卸载NetworkManager(这个软件包一般Linux没有装)
# sudo rpm -e --nodeps NetworkManager
b)编辑文件/etc/sysconfig/network如下:
NETWORKING=yes OSTNAME=localhost.localdomain
c)编辑网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0:
DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
d)修改udev防止以太网接口生成固定规则,在Azure平台上克隆虚拟机的时候,这些规则可能导致问题。
# sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules # sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
e)确保系统在启动的时候网络服务正常:
# sudo chkconfig network on
-
对于CentOS 6.3或早期版本,安装驱动Linux Integration Services (LIS),在CentOS 6.4+ 以上版本跳过此步骤
下载如下软件包,并通过rpm进行安装:LIS download page -
安装软件包python-pyasn1,后面的WALinuxAgent依赖于此
# sudo yum install python-pyasn1
-
修改yum相关配置,为安装WaLinuxAgent做准备
a)编辑yum配置文件/etc/yum.repos.d/CentOS-Base.repo
[openlogic] name=CentOS-$releasever - openlogic packages for $basearch baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/ enabled=1 gpgcheck=0 [base] name=CentOS-$releasever - Base baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #released updates [updates] name=CentOS-$releasever - Updates baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #contrib - packages by Centos Users [contrib] name=CentOS-$releasever - Contrib baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/contrib/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
b)配置/etc/yum.conf
http_caching=packages
另外,CentOS 6.3需要增加如下行:
exclude=kernel*
c)编辑/etc/yum/pluginconf.d/fastestmirror.conf, 使得yum模块"fastestmirror"无效
在[main]一节, 设置
set enabled=0
d)清空现有的yum源数据
# yum clean all
e)对于CentOS 6.3, 更新内核:
# sudo yum --disableexcludes=all install kernel
f)在grub配置中为Azure修改内核启动参数,打开"/boot/grub/menu.lst",增加:
console=ttyS0 earlyprintk=ttyS0 rootdelay=300 numa=off
建议去掉以下参数:
rhgb quiet crashkernel=auto
-
通过yum安装WaLinuxAgent
a)安装Azure Linux Agent
# sudo yum install WALinuxAgent
b)打开配置文件/etc/waagent.conf如下修改:
ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048` ## NOTE:此项根据你的需要设置
c)运行如下命令,你将不能再启动此虚拟机,直到它部署在Azure上运行。
# sudo waagent -force -deprovision # export HISTSIZE=0 # logout
-
在Hyper-v中关闭Linux,Linux VHD文件已经制作好并可以上传到Azure。
第三步:将VHD上传至Azure
用PowerShell将VHD文件上传到Azure
假设上传的文件是myvhd.vhd,上传存储空间是mystorage,容器是mycontainer
-
在Azure管理平台上建立存储位置。
假设我们的目标是将VHD文件放置到Azure上的存储空间mystorage中的容器mycontainer中,位置为myurl。
进入Azure管理平台,建立存储空间mystorage并在其下面建立容器mycontainer,然后拷贝这个容器的url位置,注意容器的属性一定要设置为“公共blob”属性,只有“公共blob”属性中的VHD映像才能够被发布到Azure 镜像市场。 -
将本地的VHD文件上传至Azure的指定位置。打开PowerShell,在PowerShell中输入如下指令。
Add-AzureVhd [[-NumberOfUploaderThreads] [<Int32>]] -Destination <BlobStorageURL>/<YourImagesFolder>/<VHDName> -LocalFilePath <PathToVHDFile>
例如:
Add-AzureVhd -NumberOfUploaderThreads 5 -Destination https://mystorage.blob.core.chinacloudapi.cn/mycontainer/myvhd.vhd -LocalFilePath D:\Mydir\Hyper-V\myvhds\myvhd.vhd
-
点击“虚拟机”-“映像”-“创建”,然后选择刚才上传的vhd创建映像。至此,您已经成功完成了映像的制作和上传。下一步,便可以发布映像到 Azure 镜像市场。