Подготовка виртуальной машины SLES или openSUSE Leap для Azure
Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы Область применения: ✔️ Универсальные масштабируемые наборы
В некоторых случаях вам может потребоваться использовать настраиваемые виртуальные машины SUSE Linux Enterprise Server (SLES) или openSUSE Leap Linux в вашей среде Azure и создавать эти типы виртуальных машин с помощью автоматизации. В этой статье показано, как создать и отправить пользовательский виртуальный жесткий диск Azure (VHD), содержащий операционную систему SUSE Linux.
Необходимые компоненты
В этой статье предполагается, что вы уже установили операционную систему SLES или openSUSE Leap Linux на виртуальном жестком диске. Существует несколько средств для создания VHD-файлов. Например, можно использовать решение виртуализации, например Hyper-V. Указания см. в статье Установка Hyper-V и настройка виртуальной машины.
Заметки о установке SLES/openSUSE Leap
- Дополнительные советы по подготовке образов Linux для Azure см . в общих заметках об установке Linux.
- Azure не поддерживает файлы образа жесткого диска Windows (VHDX). Поддерживаются только файлы VHD (VHD). Диск можно преобразовать в формат VHD с помощью диспетчера Hyper-V или командлета
Convert-VHD
. - виртуальные машины поддержка Azure 1-го поколения (загрузка BIOS) и UEFI(UEFI).
- Модуль ядра таблицы распределения виртуальных файлов (VFAT) должен быть включен в ядре.
- Не настраивайте раздел подкачки на диске с ОС. Вы можете настроить агент Linux для создания файла подкачки на временном диске с ресурсами. Далее в этой статье приведены дополнительные сведения о настройке пространства подкачки.
- Размер виртуальной памяти всех виртуальных жестких дисков в Azure должен быть округлен до 1 МБ. При преобразовании с необработанного диска на VHD убедитесь, что размер необработанного диска составляет 1 МБ перед преобразованием. Дополнительные сведения см . в разделе "Общие заметки о установке Linux".
Примечание.
Cloud-init версии 21.2 или более поздней удаляет требование определяемой пользователем функции (UDF). Но без udf
включения модуля компакт-диск не будет подключаться во время подготовки, что предотвращает применение пользовательских данных. Обходной путь — применение пользовательских данных. Однако, в отличие от пользовательских данных, пользовательские данные не шифруются. Дополнительные сведения см . в документации по cloud-init.
Использование SUSE Studio
SUSE Studio можно с легкостью использовать для создания образов SLES и openSUSE Leap для Azure и Hyper-V, а также для управления этими образами. SUSE Studio — это рекомендуемый подход для настройки собственных образов SLES и openSUSE Leap.
В качестве альтернативы созданию собственного виртуального жесткого диска SUSE также публикует образы BYOS (принести собственную подписку) для SLES на виртуальной машине depot.
Подготовка SLES для Azure
При необходимости настройте модули Azure и Hyper-V.
Если гипервизор программного обеспечения не является Hyper-V, для успешной загрузки в Azure необходимо добавить другие модули в исходный диск ОЗУ (initramfs).
Измените файл /etc/dracut.conf и добавьте в файл следующую строку:
add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
dracut
Выполните команду, чтобы перестроить файл initramfs:sudo dracut --verbose --force
Настройте последовательную консоль.
Чтобы успешно работать с последовательной консолью, необходимо настроить несколько переменных в файле /etc/defaults/grub и повторно создать GRUB на сервере:
# Add console=ttyS0 and earlyprintk=ttS0 to the variable. # Remove "splash=silent" and "quiet" options. GRUB_CMDLINE_LINUX_DEFAULT="audit=1 no-scroll fbcon=scrollback:0 mitigations=auto security=apparmor crashkernel=228M,high crashkernel=72M,low console=ttyS0 earlyprintk=ttyS0" # Add "console serial" to GRUB_TERMINAL. GRUB_TERMINAL="console serial" # Set the GRUB_SERIAL_COMMAND variable. GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
Зарегистрируйте систему SUSE Linux Enterprise, чтобы позволить ей скачивать обновления и устанавливать пакеты.
Установите в системе последние исправления:
sudo zypper update
Установите агент виртуальной машины Azure Linux (
waagent
) и cloud-init:sudo SUSEConnect -p sle-module-public-cloud/15.2/x86_64 (SLES 15 SP2) sudo zypper refresh sudo zypper install python-azure-agent sudo zypper install cloud-init
Включите
waagent
и cloud-init для запуска при загрузке:sudo systemctl enable waagent sudo systemctl enable cloud-init-local.service sudo systemctl enable cloud-init.service sudo systemctl enable cloud-config.service sudo systemctl enable cloud-final.service sudo systemctl daemon-reload sudo cloud-init clean
Обновите конфигурацию cloud-init:
cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF
sudo cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/05_logging.cfg # 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 # Make sure mounts and disk_setup are in the init stage: 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
Если вы хотите подключить, отформатировать и создать раздел буфера, один из вариантов — передать конфигурацию cloud-init при каждом создании виртуальной машины.
Другой вариант — использовать директиву cloud-init в образе для настройки пространства подкачки при каждом создании виртуальной машины:
cat <<EOF | sudo tee -a /etc/systemd/system.conf 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' EOF cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg #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"] - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF
Ранее агент Linux Azure использовался для автоматической настройки пространства буфера с помощью локального диска ресурсов, подключенного к виртуальной машине после подготовки виртуальной машины в Azure. Так как cloud-init теперь обрабатывает этот шаг, не следует использовать агент Azure Linux для форматирования диска ресурсов или создания файла буфера. Используйте эти команды для изменения /etc/waagent.conf соответствующим образом:
sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=auto/g' /etc/waagent.conf sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /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
Примечание.
Если вы используете облачную версию init ранее 21.2, убедитесь, что
udf
модуль включен. Удаление или отключение приведет к сбою подготовки или загрузки. Cloud-init версии 21.2 или более поздней удаляет требование UDF.Убедитесь, что файл /etc/fstab ссылается на диск с помощью UUID (
by-uuid
).Удалите правила udev и файлы конфигурации сетевого адаптера, чтобы избежать создания статических правил для интерфейсов Ethernet. Эти правила могут вызвать проблемы при клонирование виртуальной машины в Microsoft Azure или Hyper-V.
sudo rm -f /etc/udev/rules.d/70-persistent-net.rules sudo rm -f /etc/udev/rules.d/85-persistent-net-cloud-init.rules sudo rm -f /etc/sysconfig/network/ifcfg-eth*
Рекомендуется изменить файл /etc/sysconfig/network/dhcp и изменить
DHCLIENT_SET_HOSTNAME
параметр следующим образом:DHCLIENT_SET_HOSTNAME="no"
В файле /etc/sudoers закомментируйте или удалите следующие строки, если они существуют:
Defaults targetpw # Ask for the password of the target user i.e. root ALL ALL=(ALL) ALL # WARNING! Only use this setting together with 'Defaults targetpw'!
Убедитесь, что сервер Secure Shell (SSH) установлен и настроен для запуска во время загрузки:
sudo systemctl enable sshd
Очистка этапа cloud-init:
sudo cloud-init clean --seed --logs
Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее к подготовке в Azure.
Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите этап отмены подготовки.
sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo export HISTSIZE=0 sudo rm -f ~/.bash_history
Подготовка openSUSE 15.4+
В центральной области диспетчера Hyper-V выберите виртуальную машину.
Выберите "Подключиться", чтобы открыть окно виртуальной машины.
В терминале выполните команду
zypper lr
. Если эта команда возвращает выходные данные, аналогичные следующему примеру, репозитории настроены должным образом, и корректировки не нужны. (Номера версий могут отличаться.)# Псевдоним Имя. Включен Проверка GPG Refresh 1 Cloud:Tools_15.4 Cloud:Tools—> Да (r) Да Да 2 openSUSE_stable_OSS openSUSE_st-> Да (r) Да Да 3 openSUSE_stable_Updates openSUSE_st-> Да (r) Да Да Если сообщение "Не определены репозитории" отображается из
zypper lr
репозиториев, необходимо добавить вручную.Ниже приведены примеры команд для добавления этих репозиториев (версии и ссылки могут отличаться):
sudo zypper ar -f https://download.opensuse.org/update/openSUSE-stable openSUSE_stable_Updates sudo zypper ar -f https://download.opensuse.org/repositories/Cloud:/Tools/15.4 Cloud:Tools_15.4 sudo zypper ar -f https://download.opensuse.org/distribution/openSUSE-stable/repo/oss openSUSE_stable_OSS
Затем можно убедиться, что репозитории были добавлены, выполнив команду
zypper lr
еще раз. Если одна из соответствующих репозиториев обновлений не включена, включите ее с помощью следующей команды:sudo zypper mr -e [NUMBER OF REPOSITORY]
Обновите ядро до последней доступной версии:
sudo zypper up kernel-default
Или обновите операционную систему со всеми последними исправлениями:
sudo zypper update
Установите агент Linux для Azure:
sudo zypper install WALinuxAgent
Измените загрузочную строку ядра в конфигурации GRUB, чтобы включить другие параметры ядра для Azure. Для этого откройте /boot/grub/menu.lst в текстовом редакторе и убедитесь, что ядро по умолчанию включает следующие параметры:
console=ttyS0 earlyprintk=ttyS0
Этот параметр гарантирует, что все сообщения консоли отправляются в первый последовательный порт, который может помочь поддержка Azure с проблемами отладки. Кроме того, удалите следующие параметры из строки загрузки ядра, если таковые существуют:
libata.atapi_enabled=0 reserve=0x1f0,0x8
Рекомендуется изменить файл /etc/sysconfig/network/dhcp и изменить
DHCLIENT_SET_HOSTNAME
параметр на следующий параметр:DHCLIENT_SET_HOSTNAME="no"
В файле /etc/sudoers закомментируйте или удалите следующие строки, если они существуют. Это важный шаг.
Defaults targetpw # ask for the password of the target user i.e. root ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки.
Не создавайте пространство подкачки на диске с ОС.
Агент Linux Azure может автоматически настроить пространство подкачки с помощью локального диска ресурсов, подключенного к виртуальной машине после подготовки в Azure. Локальный диск ресурсов является временным диском и будет очищаться при отмене подготовки виртуальной машины.
После установки агента Linux Azure измените параметры в файле /etc/waagent.conf следующим образом:
ResourceDisk.Format=n ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=n ResourceDisk.SwapSizeMB=2048 ## NOTE: set the size to whatever you need it to be.
Убедитесь, что агент Linux Azure выполняется при запуске:
sudo systemctl enable waagent.service
Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее к подготовке в Azure.
Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите этап отмены подготовки.
sudo rm -f ~/.bash_history # Remove current user history sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history # Remove root user history sudo export HISTSIZE=0
В диспетчере Hyper-V выберите Действие>Завершение работы.
Следующие шаги
Теперь вы готовы использовать VHD SUSE Linux для создания новых виртуальных машин в Azure. Если вы отправляете VHD-файл в Azure впервые, см. раздел Вариант 1. Передача VHD.