您的位置:首页 > 运维架构 > Linux

从本机构建Linux应用程序VHD映像

2016-07-25 11:26 489 查看

下图描述了总体的虚拟机映像的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 镜像市场。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: