Подготовка виртуальной машины 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

  1. При необходимости настройте модули Azure и Hyper-V.

    Если гипервизор программного обеспечения не является Hyper-V, для успешной загрузки в Azure необходимо добавить другие модули в исходный диск ОЗУ (initramfs).

    Измените файл /etc/dracut.conf и добавьте в файл следующую строку:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    dracut Выполните команду, чтобы перестроить файл initramfs:

    sudo dracut --verbose --force
    
  2. Настройте последовательную консоль.

    Чтобы успешно работать с последовательной консолью, необходимо настроить несколько переменных в файле /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
    
  3. Зарегистрируйте систему SUSE Linux Enterprise, чтобы позволить ей скачивать обновления и устанавливать пакеты.

  4. Установите в системе последние исправления:

    sudo zypper update
    
  5. Установите агент виртуальной машины 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
    
  6. Включите 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
    
  7. Обновите конфигурацию 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
    
  8. Если вы хотите подключить, отформатировать и создать раздел буфера, один из вариантов — передать конфигурацию 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
    
  9. Ранее агент 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.

  10. Убедитесь, что файл /etc/fstab ссылается на диск с помощью UUID (by-uuid).

  11. Удалите правила 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*
    
  12. Рекомендуется изменить файл /etc/sysconfig/network/dhcp и изменить DHCLIENT_SET_HOSTNAME параметр следующим образом:

    DHCLIENT_SET_HOSTNAME="no"
    
  13. В файле /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'!
    
  14. Убедитесь, что сервер Secure Shell (SSH) установлен и настроен для запуска во время загрузки:

    sudo systemctl enable sshd
    
  15. Очистка этапа cloud-init:

    sudo cloud-init clean --seed --logs
    
  16. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее к подготовке в Azure.

    Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите этап отмены подготовки.

    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo export HISTSIZE=0
    sudo rm -f ~/.bash_history
    

Подготовка openSUSE 15.2+

  1. В центральной области диспетчера Hyper-V выберите виртуальную машину.

  2. Выберите Подключение, чтобы открыть окно виртуальной машины.

  3. В терминале выполните команду zypper lr. Если эта команда возвращает выходные данные, аналогичные следующему примеру, репозитории настроены должным образом, и корректировки не нужны. (Номера версий могут отличаться.)

    # Псевдоним Имя Включен Обновить
    1 Cloud:Tools_15.2 Cloud:Tools_15.2 Да Да
    2 openSUSE_15.2_OSS openSUSE_15.2_OSS Да Да
    3 openSUSE_15.2_Updates openSUSE_15.2_Updates Да Да

    Если команда возвращает значение "Без репозиториев, определенных", используйте следующие команды, чтобы добавить эти репозитории:

    sudo zypper ar -f http://download.opensuse.org/repositories/Cloud:Tools/openSUSE_15.2 Cloud:Tools_15.2
    sudo zypper ar -f https://download.opensuse.org/distribution/15.2/repo/oss openSUSE_15.2_OSS
    sudo zypper ar -f http://download.opensuse.org/update/15.2 openSUSE_15.2_Updates
    

    Затем можно убедиться, что репозитории были добавлены, выполнив команду zypper lr еще раз. Если одна из соответствующих репозиториев обновлений не включена, включите ее с помощью следующей команды:

    sudo zypper mr -e [NUMBER OF REPOSITORY]
    
  4. Обновите ядро до последней доступной версии:

    sudo zypper up kernel-default
    

    Или обновите операционную систему со всеми последними исправлениями:

    sudo zypper update
    
  5. Установите агент Linux для Azure:

    sudo zypper install WALinuxAgent
    
  6. Измените загрузочную строку ядра в конфигурации GRUB, чтобы включить другие параметры ядра для Azure. Для этого откройте /boot/grub/menu.lst в текстовом редакторе и убедитесь, что ядро по умолчанию включает следующие параметры:

     console=ttyS0 earlyprintk=ttyS0
    

    Этот параметр гарантирует, что все сообщения консоли отправляются в первый последовательный порт, который может помочь поддержка Azure с проблемами отладки. Кроме того, удалите следующие параметры из строки загрузки ядра, если таковые существуют:

     libata.atapi_enabled=0 reserve=0x1f0,0x8
    
  7. Рекомендуется изменить файл /etc/sysconfig/network/dhcp и изменить DHCLIENT_SET_HOSTNAME параметр на следующий параметр:

     DHCLIENT_SET_HOSTNAME="no"
    
  8. В файле /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'!
    
  9. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки.

  10. Не создавайте пространство подкачки на диске с ОС.

    Агент 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.
    
  11. Убедитесь, что агент Linux Azure выполняется при запуске:

    sudo systemctl enable waagent.service
    
  12. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее к подготовке в 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
    
  13. В диспетчере Hyper-V выберите Действие>Завершение работы.

Следующие шаги

Теперь вы готовы использовать VHD SUSE Linux для создания новых виртуальных машин в Azure. Если вы отправляете VHD-файл в Azure впервые, см. раздел Вариант 1. Передача VHD.