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

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

Теперь Ubuntu публикует официальные виртуальные жесткие диски Azure, загрузить которые можно по адресу: https://cloud-images.ubuntu.com/. Если вам нужно создать свой собственный, особый образ Ubuntu для Azure, не выполняйте описанную ниже процедуру, а начните с таких заведомо рабочих виртуальных жестких дисков и настройте их так, как вам требуется. Последние выпуски образов можно всегда найти в следующих расположениях:

Предварительные требования

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

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

  • Дополнительные сведения о подготовке Linux для Azure см. в разделе Общие замечания по установке Linux.
  • Формат VHDX не поддерживается в Azure, поддерживается только фиксированный VHD. Вы можете преобразовать диск в формат VHD с помощью диспетчера Hyper-V или командлета Convert-VHD.
  • При установке системы Linux рекомендуется использовать стандартные разделы, а не LVM (как правило, значение по умолчанию во многих дистрибутивах). Это позволит избежать конфликта имен LVM при клонировании виртуальных машин, особенно если диск с OC может быть подключен к другой ВМ в целях устранения неполадок. Для дисков данных можно использовать LVM или RAID.
  • Не настраивайте раздел или файл подкачки на диске с ОС. Агент подготовки cloud-init можно настроить так, чтобы он создал файл или раздел подкачки на временном диске ресурсов. Дополнительные сведения описаны далее.
  • Размер виртуальной памяти всех VHD в Azure должен быть округлен до 1 МБ. При конвертации диска в формате RAW в виртуальный жесткий диск убедитесь, что размер диска RAW в несколько раз превышает 1 МБ. См. дополнительные сведения в примечаниях по установке Linux.

Создание вручную

Примечание

Прежде чем создавать собственный образ Ubuntu для Azure, попробуйте использовать предварительно созданные и проверенные образов с сайта https://cloud-images.ubuntu.com/.

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

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

  3. Замените текущие репозитории в образе репозиторием Azure для Ubuntu.

    Перед редактированием /etc/apt/sources.list рекомендуется сделать резервную копию:

    # sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    

    Ubuntu 18.04 и Ubuntu 20.04:

    # sudo sed -i 's/http:\/\/archive\.ubuntu\.com\/ubuntu\//http:\/\/azure\.archive\.ubuntu\.com\/ubuntu\//g' /etc/apt/sources.list
    # sudo sed -i 's/http:\/\/[a-z][a-z]\.archive\.ubuntu\.com\/ubuntu\//http:\/\/azure\.archive\.ubuntu\.com\/ubuntu\//g' /etc/apt/sources.list
    # sudo apt-get update
    
  4. Образы Ubuntu для Azure теперь используют специализированное ядро Azure. Обновите операционную систему до последней версии специализированного ядра Azure и установите инструменты Azure для Linux (включая зависимости Hyper-V), выполнив следующие команды:

    Ubuntu 18.04 и Ubuntu 20.04:

    # sudo apt update
    # sudo apt install linux-azure linux-image-azure linux-headers-azure linux-tools-common linux-cloud-tools-common linux-tools-azure linux-cloud-tools-azure
    (recommended) # sudo apt full-upgrade
    
    # sudo reboot
    
  5. Измените строку загрузки ядра в конфигурации Grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте файл /etc/default/grub в текстовом редакторе, найдите переменную GRUB_CMDLINE_LINUX_DEFAULT (или добавьте ее, если это необходимо) и измените ее, включив следующие параметры:

     GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 quiet splash"
    

    Сохраните и закройте файл, а затем выполните команду sudo update-grub. Это гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки.

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

  7. Установите cloud-init (агент подготовки) и агент Linux для Azure (обработчик гостевых расширений). В пакете cloud-init для настройки конфигурации сети системы (во время подготовки к работе и каждой последующей загрузки) используются netplan и gdisk, чтобы разделить диски ресурсов.

    # sudo apt update
    # sudo apt install cloud-init gdisk netplan.io walinuxagent && systemctl stop walinuxagent
    

    Примечание

    Установка пакета walinuxagent приведет к удалению пакетов NetworkManager и NetworkManager-gnome (если они установлены).

  8. Удалите конфигурации cloud-init, используемые по умолчанию, и оставшиеся артефакты netplan, которые могут конфликтовать с процессом подготовки cloud-init в Azure:

    # rm -f /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg /etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg /etc/cloud/cloud.cfg.d/99-installer.cfg /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg
    # rm -f /etc/cloud/ds-identify.cfg
    # rm -f /etc/netplan/*.yaml
    
  9. Настройте cloud-init для подготовки системы к работе с помощью источника данных Azure:

     # cat > /etc/cloud/cloud.cfg.d/90_dpkg.cfg << EOF
     datasource_list: [ Azure ]
    EOF
    
     # cat > /etc/cloud/cloud.cfg.d/90-azure.cfg << EOF
    system_info:
       package_mirrors:
         - arches: [i386, amd64]
           failsafe:
             primary: http://archive.ubuntu.com/ubuntu
             security: http://security.ubuntu.com/ubuntu
           search:
             primary:
               - http://azure.archive.ubuntu.com/ubuntu/
             security: []
         - arches: [armhf, armel, default]
           failsafe:
             primary: http://ports.ubuntu.com/ubuntu-ports
             security: http://ports.ubuntu.com/ubuntu-ports
    EOF
    
     # cat > /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg << EOF
    reporting:
      logging:
        type: log
      telemetry:
        type: hyperv
    EOF
    
  10. Настройте агент Linux для Azure, чтобы он выполнял подготовку с помощью cloud-init. Дополнительные сведения об этих параметрах см. в проекте WALinuxAgent.

    sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
    sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/g' /etc/waagent.conf
    sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
    sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
    
    cat >> /etc/waagent.conf << EOF
    # For Azure Linux agent version >= 2.2.45, this is the option to configure,
    # enable, or disable the provisioning behavior of the Linux agent.
    # Accepted values are auto (default), waagent, cloud-init, or disabled.
    # A value of auto means that the agent will rely on cloud-init to handle
    # provisioning if it is installed and enabled, which in this case it will.
    Provisioning.Agent=auto
    EOF
    
  11. Очистите журналы и артефакты среды выполнения cloud-init и агента Linux для Azure:

    # sudo cloud-init clean --logs --seed
    # sudo rm -rf /var/lib/cloud/
    # sudo systemctl stop walinuxagent.service
    # sudo rm -rf /var/lib/waagent/
    # sudo rm -f /var/log/waagent.log
    
  12. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:

    Примечание

    Команда sudo waagent -force -deprovision+user выполняет обобщение образа, пытаясь очистить систему и сделать ее пригодной для повторной подготовки. Команда +user также удаляет последнюю подготовленную учетную запись пользователя и связанные с ней данные.

    Предупреждение

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

    # sudo waagent -force -deprovision+user
    # rm -f ~/.bash_history
    # export HISTSIZE=0
    # logout
    
  13. В диспетчере Hyper-V выберите Действие -> Завершение работы.

  14. Azure принимает виртуальные жесткие диски только фиксированного размера. Если диск ОС виртуальной машины не является виртуальным жестким диском фиксированного размера, используйте командлет PowerShell Convert-VHD с параметром -VHDType Fixed. Ознакомьтесь с документацией по Convert-VHDздесь.

  15. Чтобы перенести виртуальную машину 2-го поколения в Azure, выполните следующие действия:

    1. Измените каталог на каталог загрузки EFI:

      # cd /boot/efi/EFI
      
    2. Скопируйте каталог Ubuntu в новый каталог с именем boot:

      # sudo cp -r ubuntu/ boot
      
    3. Смените каталог на только что созданный каталог загрузки:

      # cd boot
      
    4. Переименуйте файл shimx64.efi:

      # sudo mv shimx64.efi bootx64.efi
      
    5. Переименуйте файл grub.cfg в bootx64.cfg:

      # sudo mv grub.cfg bootx64.cfg 
      

Дальнейшие действия

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