自定义本地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分支,可前往
使用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文件,还需要注意以下几点
-
如果您是CentOS6,使用如下命令卸载NetworkManager服务,因为他会干扰Azure Linux Agent
# sudo rpm -e –nodeps NetworkManager
-
CentOS 6.5 和更早版本还必须设置内核参数 numa=off
细节问题,可参见:https://access.redhat.com/solutions/436883
-
如果要使用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
- 如果您的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