Подготовка виртуальной машины Oracle Linux для Azure

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы

В этой статье предполагается, что вы уже установили операционную систему Oracle Linux на виртуальный жесткий диск. Существует несколько средств для создания VHD-файлов, например решение для виртуализации, такое как Hyper-V. Инструкции см. в разделе Установка роли Hyper-V и настройка виртуальной машины.

Замечания по установке Oracle Linux

  • См. дополнительные сведения о подготовке Linux для Azure.
  • Hyper-V и Azure поддерживают Oracle Linux с ядром Unbreakable Enterprise Kernel (UEK) или ядром, совместимым с Red Hat.
  • UEK2 Oracle не поддерживается в Hyper-V и Azure, так как он не включает необходимые драйверы.
  • Формат VHDX не поддерживается в Azure, поддерживается только фиксированный VHD. Можно преобразовать диск в формат VHD с помощью диспетчера Hyper-V или командлета convert-vhd.
  • Требуется поддержка ядра для монтирования файловых систем UDF. При первой загрузке в Azure конфигурация подготовки передается виртуальной машине Linux через отформатированный UDF носитель, подключенный к гостевой машине. Агент Azure Linux должен иметь возможность подключать файловую систему UDF для считывания конфигурации и подготовки виртуальной машины.
  • При установке системы Linux рекомендуется использовать стандартные секции, а не LVM (часто по умолчанию для многих установок). Эти стандартные секции избежать конфликтов имен LVM с клонируемыми виртуальными машинами, особенно если диск ОС когда-либо должен быть подключен к другой виртуальной машине для устранения неполадок. Для дисков данных можно использовать LVM или RAID.
  • Версии ядра Linux ниже 2.6.37 не поддерживают NUMA в Hyper-V с виртуальными машинами большего размера. Эта проблема в основном влияет на старые дистрибутивы с помощью ядра вышестоящий Red Hat 2.6.32 и исправлена в Oracle Linux 6.6 и более поздних версий.
  • Не настраивайте раздел подкачки на диске с ОС.
  • Размер виртуальной памяти всех виртуальных жестких дисков в Azure должен быть округлен до 1 МБ. Перед конвертацией диска RAW в формат VHD убедитесь, что размер диска RAW в несколько раз превышает 1 МБ. См. дополнительные сведения в примечаниях по установке Linux.
  • Убедитесь, что Addons включен репозиторий. Измените файл /etc/yum.repos.d/public-yum-ol6.repo (Oracle Linux 6) или /etc/yum.repos.d/public-yum-ol7.repo (Oracle Linux 7) и замените в нем строку enabled=0 строкой enabled=1 в разделе [ol6_addons] или [ol7_addons].

Oracle Linux 6.X

Важно!

Учитывайте, что Oracle Linux 6.x уже является EOL. Oracle Linux версии 6.10 имеет поддержку ELS, которая завершится 07.2024.

Необходимо выполнить определенные действия с конфигурацией операционной системы, чтобы виртуальная машина запускалась в среде Azure.

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

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

  3. Удалите NetworkManager, выполнив следующую команду:

    sudo rpm -e --nodeps NetworkManager
    

    Примечание.

    Если пакет еще не установлен, эта команда завершается ошибкой. Ожидается, что это сообщение.

  4. Создайте файл с именем network в каталоге /etc/sysconfig/. Файл должен содержать следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Создайте файл с именем ifcfg-eth0 в каталоге /etc/sysconfig/network-scripts/. Файл должен содержать следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Переместите или удалите правила udev, чтобы не создавать статические правила для интерфейса Ethernet. Эти правила приводят к появлению проблем при клонировании виртуальной машины в Microsoft Azure или Hyper-V:

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

    sudo chkconfig network on
    
  8. Установите python-pyasn1, выполнив следующую команду:

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

    console=ttyS0 earlyprintk=ttyS0
    

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

    В дополнение к приведенным выше параметрам рекомендуется удалить следующие параметры:

    rhgb quiet crashkernel=auto
    

    Графическая и "тихая" загрузка бесполезны в облачной среде, в которой нам нужно, чтобы все журналы отправлялись на последовательный порт.

    При желании этот параметр может быть настроен, но обратите внимание, что этот crashkernel параметр уменьшает объем доступной памяти на виртуальной машине на 128 МБ или более, что может быть проблематично на меньших размерах виртуальных машин.

  10. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки. Обычно это сделано по умолчанию.

  11. Установите агент Linux для Azure, выполнив следующую команду. Последней является версия 2.0.15.

    sudo yum install WALinuxAgent
    

    Установка пакета WALinuxAgent удаляет пакеты NetworkManager и NetworkManager-gnome, если они еще не удалены, как описано на шаге 2.

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

    Агент Linux для Azure может автоматически настраивать пространство подкачки с использованием диска на локальном ресурсе, подключенном к виртуальной машине после подготовки для работы в среде Azure. Локальный диск ресурсов является временным диском и может быть очищен при отмене подготовки виртуальной машины. После установки агента Linux для Azure (см. предыдущий шаг) измените следующие параметры в /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.
    
  13. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:

    sudo waagent -force -deprovision
    sudo export HISTSIZE=0
    sudo logout
    
  14. В диспетчере Hyper-V выберите Действие -> Завершение работы. Виртуальный жесткий диск Linux готов к передаче в Azure.


Oracle Linux 7.0 и более поздние версии

Изменения в Oracle Linux 7

Подготовка виртуальной машины Oracle Linux 7 для Azure аналогична Oracle Linux 6, однако стоит отметить несколько существенных различий.

  • Azure поддерживает Oracle Linux с ядром Unbreakable Enterprise Kernel (UEK) или ядром, совместимым с Red Hat. Рекомендуется использовать Oracle Linux с UEK.
  • Пакет NetworkManager больше не конфликтует с агентом Azure Linux. Этот пакет устанавливается по умолчанию и рекомендуется не удалять его.
  • В качестве загрузчика по умолчанию теперь используется GRUB2, поэтому изменилась процедура правки параметров ядра (см. ниже).
  • XFS теперь является файловой системой по умолчанию. При желании можно продолжать использование файловой системы ext4.

Шаги настройки

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

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

  3. Создайте файл с именем network в каталоге /etc/sysconfig/. Файл должен содержать следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Создайте файл с именем ifcfg-eth0 в каталоге /etc/sysconfig/network-scripts/. Файл должен содержать следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  5. Переместите или удалите правила udev, чтобы не создавать статические правила для интерфейса Ethernet. Эти правила приводят к появлению проблем при клонировании виртуальной машины в Microsoft Azure или Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    
  6. Убедитесь, что сетевая служба начинается во время загрузки, выполнив следующую команду:

    sudo chkconfig network on
    
  7. Установите пакет python-pyasn1, выполнив следующую команду:

    sudo yum install python3-pyasn1
    
  8. Выполните следующую команду, чтобы очистить текущие метаданные yum и установить все обновления:

    sudo yum clean all
    sudo yum -y update
    
  9. Измените загрузочную строку ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте файл /etc/default/grub в текстовом редакторе и измените параметр GRUB_CMDLINE_LINUX, например:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    Это также гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки. При этом также отключаются соглашения об именовании сетевых карт в Oracle Linux 7 с Unbreakable Enterprise Kernel. Помимо вышесказанного, рекомендуется удалить следующие параметры:

       rhgb quiet crashkernel=auto
    

    Графическая и "тихая" загрузка бесполезны в облачной среде, в которой нам нужно, чтобы все журналы отправлялись на последовательный порт.

    При желании этот параметр может быть настроен, но обратите внимание, что этот crashkernel параметр уменьшит объем доступной памяти на виртуальной машине до 128 МБ или более, что может быть проблематично для небольших размеров виртуальных машин.

  10. После завершения редактирования "/etc/default/grub" для каждого выше выполните следующую команду, чтобы перестроить конфигурацию grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  11. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки. Обычно это сделано по умолчанию.

  12. Установите агент Linux для Azure и зависимости:

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent
    
  13. Установите cloud-init для обработки операций подготовки:

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
  14. Настройка waagent для cloud-init

    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
    
  15. Переключите конфигурацию. Не создавайте пространство подкачки на диске ОС.

    Ранее агент Linux Azure использовался автоматически для настройки пространства буфера с помощью локального диска ресурсов, подключенного к виртуальной машине после подготовки виртуальной машины в Azure. Однако теперь это обрабатывается 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
    

    Если вы хотите подключить, отформатировать и создать переключение, можно:

    • Передать его в конфигурации cloud-init при каждом создании виртуальной машины.
    • Использовать директиву cloud-init, встроенную в образ, которая будет выполнять эту операцию при каждом создании виртуальной машины:
    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
    
  16. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в 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
    

    Примечание.

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

  17. В диспетчере Hyper-V выберите Действие -> Завершение работы. Виртуальный жесткий диск Linux готов к передаче в Azure.

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

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