当前位置: 首页 > Microsoft Azure > 正文

自定义本地Linux VM并上传至Azure China

前面谈到了如何本地制作VHD文件,并上传至Azure China,然后基于此VHD文件部署ARM VM,但是演示环境为Windows Server,很多朋友说现在云计算平台中,Linux Server占比要超过Windows Server,能不能写一篇基于Linux的文章。后来想想,的确,在Azure China中至少有60%的用户使用Linux Server。因此今天主要写写关于如何自定义Linux VM。

在本实验环境中,基于CentOS-7-x86_64-DVD-1708,即CentOS7.4

和前面一样,创建一个固定大小的.vhd文件


安装CentOS 7.4操作系统



在服务器中安装适用于Hyper-V和Azure的Linux集成服务


下载链接如下

https://www.microsoft.com/en-us/download/details.aspx?id=55106


如果您安装的是其他Linux分支,可前往

https://docs.microsoft.com/zh-cn/windows-server/virtualization/hyper-v/supported-linux-and-freebsd-virtual-machines-for-hyper-v-on-windows

使用root账户登陆服务器


Linux 集成服务使用Hyper-V TimeSync协议来确保时间的准确性,因此查看时间同步源

cat /sys/class/ptp/ptpx/clock_name


使用”LinuxIC-4.2.3-2.iso”安装Linux集成服务


使用下面的命令进行安装

# mount /dev/cdrom /media

mount: /dev/sr0 is write-protected, mounting read-only

# cd /media

# ./install.sh

# reboot


注意,如果您当前的Linux环境缺失虚拟设备的驱动程序,请使用root或者sudo提权进行操作

# insmod /lib/modules/$(uname -r)/kernel/drivers/ata/ata_piix.ko

使用如下命令进行验证

# /sbin/modinfo hv_vmbus


使用如下命令验证所有”子组件”已正常运行

# /sbin/lsmod | egrep -i “^hv|hyperv”


创建或编辑 /etc/sysconfig/network 文件,添加以下文本

NETWORKING=yes

HOSTNAME=localhost.localdomain

创建或编辑文件/etc/sysconfig/network-scripts/ifcfg-eth0并添加以下文本

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=dhcp

TYPE=Ethernet

USERCTL=no

PEERDNS=yes

IPV6INIT=no

NM_CONTROLLED=no

修改 udev 规则,以免为以太网接口生成静态规则。如果没有执行,在Azure 中克隆虚拟机时,这些规则可能会引发问题

# sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules

运行以下命令清除当前 yum 元数据并安装所有更新

# sudo yum clean all

将所有包都更新到最新版本

# sudo yum -y update


在grub配置中修改内核引导行,以使其包含Azure的其他内核参数。在文本编辑器中打开 /etc/default/grub并编辑GRUB_CMDLINE_LINUX参数

GRUB_CMDLINE_LINUX=”rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0″

rhgb quiet crashkernel=auto

需要说明的是在,这是针对CentOS 7 NIC的命名约定

GUI图形化界面和静默引导不适用于要将所有日志发送到串行端口的云环境。 根据需要我们可以配置crashkernel选项,但请注意此参数会使VM中的可用内存量减少128 MB或更多,这在较小的VM上可能会出现问题。

按照上面所示完成编辑/etc/default/grub后,运行以下命令以重新生成 grub 配置:

# sudo grub2-mkconfig -o /boot/grub2/grub.cfg

最后我们还需要安装SSH服务

#sudo yum install openssh*

注册SSH服务

sudo systemctl enable sshd

service sshd start

开启防火墙的22端口

sudo firewall-cmd –zone=public –add-port=22/tcp –permanent

sudo service firewalld restart


安装 Azure Linux 代理和依赖项

#yum install python-pyasn1 WALinuxAgent



# systemctl enable waagent


Azure Linux代理可使用在Azure上设置后附加到虚拟机的本地资源磁盘自动配置交换空间。 请注意,本地资源磁盘是临时磁盘,并可能在取消设置虚拟机时被清空。在安装 Azure Linux 代理后,相应地在 /etc/waagent.conf 中修改以下参数:

ResourceDisk.Format=y

ResourceDisk.Filesystem=ext4

ResourceDisk.MountPoint=/mnt/resource

ResourceDisk.EnableSwap=y

ResourceDisk.SwapSizeMB=2048
## NOTE: set this to whatever you need it to be.

运行以下命令可取消对虚拟机的预配并且对其进行准备以便在Azure上进行预配

# sudo waagent -force -deprovision

# export HISTSIZE=0

# logout


之后我们就可以关闭这台CentOS 机器了。开始使用Azure PowerShell或者AzureCli将VHD文件上载到Azure China。

打开 Azure PowerShell并登录到Azure帐户。此时会打开一个弹出窗口让输入Azure 帐户凭据。

Login-AzureRmAccount -EnvironmentName AzureChinaCloud

如果您的账户中有多个订阅,请使用下面命令选择某一个订阅

Select-AzureRmSubscription -SubscriptionId “<subscriptionID>”

在中国东部区域中创建名为CloudVMGroup的资源组

New-AzureRmResourceGroup -Name CloudVMGroup -Location “China East”

在该资源组中创建存储账户

New-AzureRmStorageAccount -ResourceGroupName CloudVMGroup -Name vmstorageaccount -Location “China East”
-SkuName “Standard_LRS” -Kind “Storage”

其中有一个参数,需要说明

-SkuName 的参数值为:

Standard_LRS – 本地冗余存储。

Standard_ZRS – 区域冗余存储。

Standard_GRS – 异地冗余存储。

Standard_RAGRS – 读取访问权限异地冗余存储。

Premium_LRS – 高级本地冗余存储。

将VHD上传到存储帐户

$rgName “CloudVMGroup”
$urlOfUploadedImageVhd “https://vmstorageaccount.blob.core.chinacloudapi.cn/vhdcontainer/CentOS7.4-based.vhd”
Add-AzureRmVhd -ResourceGroupName $rgName -Destination $urlOfUploadedImageVhd -LocalFilePath “C:\Hyper-V\CentOS7.4-based\CentOS7.4-based.vhd”

接下来的动作,和前面的介绍一样,这里不再过多说明。详细步骤移驾:

http://365vcloud.net/2017/12/06/create-azure-arm-vm-based-on-vhd/

关于制作本地Linux VHD文件,还需要注意以下几点

  1. 如果您是CentOS6,使用如下命令卸载NetworkManager服务,因为他会干扰Azure Linux Agent

    # sudo rpm -e –nodeps NetworkManager

  2. CentOS 6.5 和更早版本还必须设置内核参数 numa=off

细节问题,可参见:https://access.redhat.com/solutions/436883

  1. 如果要使用Azure数据中心托管的OpenLogic镜像,请使用以下存储库替换/etc/yum.repos.d/CentOS-Base.repo文件。这还会添加包含Azure Linux代理包的[openlogic]存储库

    [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

    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/

    gpgcheck=1

    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

    #released updates

    [updates]

    name=CentOS-$releasever – Updates

    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra

    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/

    gpgcheck=1

    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

    #additional packages that may be useful

    [extras]

    name=CentOS-$releasever – Extras

    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra

    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/

    gpgcheck=1

    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

    #additional packages that extend functionality of existing packages

    [centosplus]

    name=CentOS-$releasever – Plus

    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra

    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/

    gpgcheck=1

    enabled=0

    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

  2. 如果您的Linux VM当前运行在VMware、KVM、Virtual Box等其他非Hyper-V平台,请确保initramfs中包括Hyper-V驱动程序:编辑/etc/dracut.conf,添加内容

    add_drivers+=”hv_vmbus hv_netvsc hv_storvsc”

重新生成 initramfs

# sudo dracut -f -v

然后将虚拟硬盘格式转换为.vhd。例如VMDK2VHD 

如果您使用的Red Hat的image,您还需要注册Red Hat订阅,以通过运行以下命令来启用来自 RHEL 存储库中的包的安装  

# sudo subscription-manager register –auto-attach –username=XXX –password=XXX

本文固定链接: http://365vcloud.net/2017/12/14/customizing-the-local-linux-vm-and-uploading-to-azure-china/ | Eric的学习之路

该日志由 TingXu 于2017年12月14日发表在 Microsoft Azure 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 自定义本地Linux VM并上传至Azure China | Eric的学习之路
关键字: