为 Azure 准备 Oracle Linux 虚拟机
适用于:✔️ Linux VM ✔️ 灵活规模集
本文假定已在虚拟硬盘 (VHD) 中安装了 Oracle Linux 操作系统 (OS)。 可使用多种工具创建 .vhd 文件。 一个例子是虚拟化解决方案(如 Hyper-V)。 有关说明,请参阅安装 Hyper-V 角色并配置虚拟机 (VM)。
Oracle Linux 安装说明
- 有关如何为 Azure 准备 Linux 的更多提示,请参阅常规 Linux 安装说明。
- Hyper-V 和 Azure 支持具有 Unbreakable Enterprise Kernel (UEK) 或 Red Hat 兼容内核的 Oracle Linux。
- Hyper-V 和 Azure 不支持 Oracle 的 UEK2,因为它不包括所需的驱动程序。
- Azure 不支持 VHDX 格式,仅支持固定大小的 VHD。 可使用 Hyper-V 管理器或
convert-vhd
cmdlet 将磁盘转换为 VHD 格式。 - 需要对装载用户定义的函数 (UDF) 文件系统的内核支持。 在 Azure 上首次启动时,预配配置将通过附加到来宾的 UDF 格式媒体传递到 Linux VM。 Azure Linux 代理必须能够装载 UDF 文件系统才能读取其配置和预配 VM。
- 在安装 Linux 系统时,建议使用标准分区而不是逻辑卷管理器 (LVM)(通常是许多安装的默认设置)。 这些标准分区可避免 LVM 名称与克隆 VM 发生冲突,特别是在 OS 磁盘需要连接到另一台 VM 以进行故障排除的情况下。 LVM 或 RAID 也可在数据磁盘上使用。
- 低于 2.6.37 的 Linux 内核版本不支持具有更大 VM 大小的 Hyper-V 上的 NUMA。 此问题主要影响使用上游 Red Hat 2.6.32 内核的旧分发版,并已在 Oracle Linux 6.6 及更高版本中修复。
- 不要在 OS 磁盘上配置交换分区。
- Azure 上所有 VHD 的虚拟大小必须已按 1 MB 对齐。 从原始磁盘转换为 VHD 时,必须确保在转换前的原始磁盘大小是 1 MB 的倍数。 有关详细信息,请参阅 Linux 安装说明。
- 请确保已启用
Addons
存储库。 编辑文件/etc/yum.repos.d/public-yum-ol6.repo
(Oracle Linux 6) 或/etc/yum.repos.d/public-yum-ol7.repo
(Oracle Linux 7)。 将此文件中 [ol6_addons] 或 [ol7_addons] 下的行enabled=0
更改为enabled=1
。
Oracle Linux 6.X
重要
请记住,Oracle Linux 6.x 的生命周期已结束。 Oracle Linux 版本 6.10 具有延长的生命周期支持,该支持将于 2024 年 7 月 终止。
你必须在操作系统中完成特定的配置步骤,VM 才能在 Azure 中运行。
在 Hyper-V 管理器的中心窗格中,选择虚拟机。
选择“连接”以打开虚拟机的窗口。
卸载
NetworkManager
:sudo rpm -e --nodeps NetworkManager
注意
如果未安装此包,则此命令会失败,并显示一条错误消息。 此消息是正常的。
在包含以下文本的
/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
修改 udev 规则,以避免产生以太网接口的静态规则。 在 Azure 或 Hyper-V 中克隆 VM 时,这些规则可能会引发问题:
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
确保网络服务在引导时启动:
sudo chkconfig network on
安装
python-pyasn1
:sudo yum install python-pyasn1
在 grub 配置中修改内核引导行,以包含 Azure 的其他内核参数。 若要执行此步骤,请在文本编辑器中打开
/boot/grub/menu.lst
,并确保内核包含以下参数:console=ttyS0 earlyprintk=ttyS0
此设置可确保将所有控制台消息发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。
除上述步骤以外,建议移除以下参数:
rhgb quiet crashkernel=auto
图形界面式引导和安静引导在云环境中不适用,在云环境中,你希望所有日志都发送到串行端口。
如果需要,可以保留
crashkernel
选项的配置。 此参数可将 VM 中的可用内存量减少 128 MB 或更多,当 VM 较小时,这可能会造成问题。请确保已安装 SSH 服务器且将其配置为在引导时启动。 此设置通常是默认设置。
通过运行以下命令来安装 Azure Linux 代理。 最新版本为 2.0.15。
sudo yum install WALinuxAgent
如果尚未按步骤 2 所述移除
NetworkManager
包和NetworkManager-gnome
包,则安装WALinuxAgent
包会移除它们。不要在 OS 磁盘上创建交换空间。
Azure Linux 代理可使用在 Azure 上预配后附加到 VM 的本地资源磁盘自动配置交换空间。 本地资源磁盘是临时磁盘,并可能在取消预配 VM 时被清空。 安装 Azure Linux 代理(参见上一步)后,相应地在
/etc/waagent.conf
中修改以下参数:ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: set this to whatever you need it to be.
取消对 VM 的预配并且对其进行准备以便在 Azure 上进行预配:
sudo waagent -force -deprovision sudo export HISTSIZE=0 sudo logout
在 Hyper-V 管理器中选择“操作”>“关闭”。 Linux VHD 现已准备好上传到 Azure。
Oracle Linux 7.0 及更高版本
如果你使用 Oracle Linux 7.0 或更高版本,请执行后续部分中的步骤。
Oracle Linux 7 中的更改
为 Azure 准备 Oracle Linux 7 VM 与 Oracle Linux 6 类似,但有几个区别值得注意:
- Azure 支持具有 Unbreakable Enterprise Kernel (UEK) 或 Red Hat 兼容内核的 Oracle Linux。 建议将 Oracle Linux 与 UEK 配合使用。
NetworkManager
包不再与 Azure Linux 代理冲突。 此包是默认安装的,建议不要移除它。- GRUB2 现在用作默认引导加载程序,因此用于编辑内核参数的过程已更改。 (请参阅“配置步骤”部分。)
- XFS 现在是默认文件系统。 如果需要,仍可以使用 ext4 文件系统。
配置步骤
在 Hyper-V 管理器中选择 VM。
选择“连接”打开 VM 的控制台窗口。
在包含以下文本的
/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
修改 udev 规则,以避免产生以太网接口的静态规则。 在 Azure 或 Hyper-V 中克隆 VM 时,这些规则可能会引发问题:
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
确保网络服务在引导时启动:
sudo chkconfig network on
安装
python-pyasn1
包:sudo yum install python3-pyasn1
清除当前 yum 元数据并安装所有更新:
sudo yum clean all sudo yum -y update
在 grub 配置中修改内核引导行,以包含 Azure 的其他内核参数。 若要执行此步骤,请在文本编辑器中打开
/etc/default/grub
并编辑GRUB_CMDLINE_LINUX
参数。 例如:GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
此修改还可确保所有控制台消息都发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。 它还会关闭具有 UEK 的 Oracle Linux 7 中网络接口卡的命名约定。 我们还建议删除以下参数:
rhgb quiet crashkernel=auto
图形界面式引导和安静引导在云环境中不适用,在云环境中,你希望所有日志都发送到串行端口。
如果需要,可以保留
crashkernel
选项的配置。 此参数可将 VM 中的可用内存量减少 128 MB 或更多,当 VM 较小时,这可能会造成问题。编辑完
/etc/default/grub
后,请重新生成 grub 配置:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
请确保已安装 SSH 服务器且将其配置为在引导时启动。 此设置通常是默认设置。
安装 Azure Linux 代理和依赖项:
sudo yum install WALinuxAgent sudo systemctl enable waagent
安装
cloud-init
来处理预配:sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
为
cloud-init
配置waagent
:sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/g' /etc/waagent.conf sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
sudo echo "Adding mounts and disk_setup to init stage" sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
echo "Allow only Azure datasource, disable fetching network setting via IMDS"
sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF if [[ -f /mnt/resource/swapfile ]]; then echo Removing swapfile - Oracle Linux uses a swapfile by default swapoff /mnt/swapfile rm /mnt/swapfile -f fi echo "Add console log file" cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF # This tells cloud-init to redirect its stdout and stderr to # 'tee -a /var/log/cloud-init-output.log' so the user can see output # there without needing to look on the console. output: {all: '| tee -a /var/log/cloud-init-output.log'} EOF
交换配置:
不要在操作系统磁盘上创建交换空间。
以前,Azure Linux 代理用于通过在 Azure 上预配 VM 后附加到 VM 的本地资源磁盘自动配置交换空间。 但是,现在由
cloud-init
处理此步骤。 你不能使用 Linux 代理来格式化资源磁盘或创建交换文件。 在/etc/waagent.conf
中适当地修改以下参数:sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
如果要装载、格式化和创建交换文件,可以:
- 请在每次创建 VM 时将此代码作为
cloud-init
配置传入。 - 使用融入映像中的
cloud-init
指令,以便在每次创建 VM 时执行此步骤:
echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF #cloud-config # Generated by Azure cloud image build disk_setup: ephemeral0: table_type: mbr layout: [66, [33, 82]] overwrite: True fs_setup: - device: ephemeral0.1 filesystem: ext4 - device: ephemeral0.2 filesystem: swap mounts: - ["ephemeral0.1", "/mnt/resource"] - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF
- 请在每次创建 VM 时将此代码作为
取消对 VM 的预配并且对其进行准备以便在 Azure 上进行预配:
sudo cloud-init clean sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision sudo rm -f ~/.bash_history sudo export HISTSIZE=0
注意
如果要迁移特定的 VM,但不希望创建通用化映像,请跳过取消预配步骤。
在 Hyper-V 管理器中选择“操作”>“关闭”。 Linux VHD 现已准备好上传到 Azure。
相关内容
现在可以使用 Oracle Linux .vhd 在 Azure 中创建新的 VM 了。 如果是首次将 .vhd 文件上传到 Azure,请参阅从自定义磁盘创建 Linux VM。