Compartilhar via


Preparar uma máquina virtual do Ubuntu para o Azure

Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis

O Ubuntu agora publica VHDs (discos rígidos virtuais) oficiais do Azure para download na página da Web Ubuntu Cloud Images. Se você precisar criar sua própria imagem especializada do Ubuntu para o Azure em vez de usar o procedimento manual a seguir, comece com esses VHDs de trabalho conhecidos e personalize-os, conforme necessário. Você sempre pode encontrar as versões mais recentes da imagem nos seguintes locais:

Pré-requisitos

Este artigo considera que você já instalou um SO (sistema operacional) Ubuntu Linux em um VHD. Existem várias ferramentas para criar arquivos .vhd. Um exemplo é uma solução de virtualização, como o Hyper-V. Para obter instruções, consulte Instalar a função Hyper-V e configurar uma VM (máquina virtual).

Notas de instalação do Ubuntu

  • Para obter mais dicas sobre como preparar o Linux para o Azure, veja Notas gerais de instalação do Linux.
  • Não há suporte para o formato VHDX no Azure, somente para o VHD fixo. Você pode converter o disco em formato VHD usando o Gerenciador do Hyper-V ou o cmdlet Convert-VHD.
  • Ao instalar o sistema Linux, recomendamos utilizar partições-padrão em vez do gerenciador de volume lógico (LVM), que geralmente é o padrão para muitas instalações. Estas partições-padrão evita conflitos de nome LVM com VMs clonadas, especialmente se um disco do sistema operacional precisar ser anexado a outra VM para solução de problemas. LVM ou RAID também podem ser usados em discos de dados.
  • Não configure uma partição de troca ou arquivo de paginação no disco do SO. Você pode configurar o agente de provisionamento cloud-init para criar um arquivo de paginação ou uma partição de troca no disco de recurso temporário. Para obter mais informações sobre esse processo, consulte as etapas a seguir.
  • Todos os VHDs no Azure devem ter um tamanho virtual alinhado a 1 MB. Ao converter de um disco não processado para VHD, certifique-se de que o tamanho do disco não processado seja um múltiplo de 1 MB antes da conversão. Para obter mais informações, consulte Notas de Instalação do Linux.

Etapas manuais

Observação

Antes de tentar criar sua própria imagem personalizada do Ubuntu para o Azure, considere usar as imagens predefinidas e testadas da página da Web Ubuntu Cloud Images.

  1. No painel central do Gerenciador do Hyper-V, selecione a VM.

  2. Selecione Conectar para abrir a janela da VM.

  3. Substitua os repositórios atuais na imagem para usar o repositório do Azure no Ubuntu.

    Antes de editar /etc/apt/sources.list, recomendamos que você faça um backup:

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    
    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 sed -i 's#http://security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
    sudo sed -i 's#http://[a-z][a-z]\.security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
    sudo apt-get update
    
  4. As imagens do Azure no Ubuntu agora estão usando o kernel personalizado do Azure. Atualize o SO para o kernel personalizado mais recente do Azure e instale as ferramentas do Linux do Azure (incluindo dependências do Hyper-V):

    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
    sudo apt full-upgrade
    sudo reboot
    
  5. Modifique a linha de inicialização para o GRUB para incluir parâmetros adicionais de kernel para o Azure. Para realizar essa etapa, abra /etc/default/grub em um editor de texto, localize a variável chamada GRUB_CMDLINE_LINUX_DEFAULT (ou adicione-a, se necessário) e edite-a para incluir os seguintes parâmetros:

    GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 quiet splash"
    
  6. Salve e feche esse arquivo e execute sudo update-grub. Essa etapa também garante que todas as mensagens do console sejam enviadas para a primeira porta serial, o que pode auxiliar o suporte do Azure com problemas de depuração.

  7. Confira se o servidor SSH está instalado e configurado para iniciar no tempo de inicialização. Essa configuração geralmente é o padrão.

  8. Instale o cloud-init (o agente de provisionamento) e o agente Linux do Azure (o manipulador de extensões de convidado). O Cloud-init usa o netplan para definir a configuração de rede do sistema (durante o provisionamento e a cada nova inicialização) e gdisk para particionar discos de recursos.

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

    Observação

    O pacote walinuxagent pode remover os pacotes NetworkManager e NetworkManager-gnome, se estiverem instalados.

  9. Remova as configurações padrão do cloud-init e os artefatos restantes do netplan que podem entrar em conflito com o provisionamento do cloud-init no Azure:

    sudo 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
    sudo rm -f /etc/cloud/ds-identify.cfg
    sudo rm -f /etc/netplan/*.yaml
    
  10. Configure cloud-init para provisionar o sistema usando a fonte de dados do Azure:

    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg
    datasource_list: [ Azure ]
    EOF
    
    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90-azure.cfg
    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 <<EOF | sudo tee /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg
    reporting:
      logging:
        type: log
      telemetry:
        type: hyperv
    EOF
    
  11. Configure o agente Linux do Azure para usar o cloud-init para executar o provisionamento. Para obter mais informações sobre essas opções, confira o projeto WALinuxAgent.

    sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
    sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/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
    
    cat <<EOF | sudo tee -a /etc/waagent.conf
    # 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
    
  12. Limpe os logs e artefatos de runtime do Agente do Linux do Azure e do cloud-init:

    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
    
  13. Desprovisione a VM e prepare-a para provisionamento no Azure.

    Observação

    O comando sudo waagent -force -deprovision+user generaliza a imagem tentando limpar o sistema e torná-la adequada para o novo provisionamento. A opção +user exclui a última conta de usuário provisionada e dados associados.

    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    

    Aviso

    O desprovisionamento usando o comando acima não garante que a imagem estará livre de todas as informações confidenciais e será adequada para redistribuição.

  14. Selecione Ação>Desligar no Gerenciador do Hyper-V.

  15. O Azure aceita somente VHDs de tamanho fixo. Se o disco do sistema operacional da VM não for um VHD de tamanho fixo, use o cmdlet do PowerShell Convert-VHD e especifique a opção -VHDType Fixed. Para obter mais informações, examine os documentos do Convert-VHD em Convert-VHD.

  16. Para trazer uma VM da geração 2 no Azure, siga estas etapas:

    1. Altere para o diretório boot EFI:

      cd /boot/efi/EFI
      
    2. Copie o diretório ubuntu para um novo diretório chamado boot:

      sudo cp -r ubuntu/ boot
      
    3. Mude para o diretório de boot recém-criado:

      cd boot
      
    4. Renomeie o arquivo shimx64.efi:

      sudo mv shimx64.efi bootx64.efi
      
    5. Renomeie o arquivo grub.cfg como bootx64.cfg:

      sudo mv grub.cfg bootx64.cfg
      

Agora está tudo pronto para usar o VHD do Ubuntu Linux para criar VMs no Azure. Se esta é a primeira vez que você está carregando o arquivo .vhd para o Azure, consulte Criar uma VM do Linux a partir de um disco personalizado.