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 oficiais do Azure para download em https://cloud-images.ubuntu.com/. Se você precisar compilar sua própria imagem do Ubuntu especializada para o Azure, em vez de usar o procedimento manual abaixo, é recomendável começar com esses VHDs de trabalho conhecidos e personalizá-los conforme necessário. As versões mais recentes da imagem sempre podem ser encontradas nos seguintes locais:

Pré-requisitos

Este artigo considera que você já instalou um sistema operacional Ubuntu Linux em um disco rígido virtual. Existem várias ferramentas para criar arquivos .vhd, por 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 máquina Virtual.

Notas de instalação do Ubuntu

  • Veja também as Notas de instalação gerais do Linux para obter mais dicas sobre como preparar o Linux para o Azure.
  • 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, é recomendável que você use partições padrão em vez de LVM (geralmente o padrão para muitas instalações). Isso irá evitar 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. Se você preferir, é possível usar LVM ou RAID em discos de dados.
  • Não configure uma partição de troca ou swapfile no disco do SO. O agente de provisionamento cloud-init pode ser configurado para criar um arquivo de permuta ou uma partição de permuta no disco de recursos temporário. Verifique as etapas a seguir para obter mais informações a esse respeito.
  • 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. Consulte Notas de Instalação do Linux para obter mais informações.

Etapas manuais

Observação

Antes de tentar criar a própria imagem personalizada do Ubuntu para o Azure, considere utilizar as imagens previamente compiladas e testadas de https://cloud-images.ubuntu.com/.

  1. No painel central do Gerenciador do Hyper-V, selecione a máquina virtual.

  2. Clique em Conectar para abrir a janela da máquina virtual.

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

    Antes de editar /etc/apt/sources.list, é recomendável fazer 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
  1. As imagens do Azure no Ubuntu agora estão usando o kernel personalizado do Azure. Atualize o sistema operacional para o kernel personalizado mais recente do Azure e instale as ferramentas do Azure no Linux (incluindo as dependências do Hyper-V) executando os seguintes comandos:
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
  1. Modifique a linha de inicialização para o Grub para incluir parâmetros adicionais de kernel para o Azure. Para fazer isso, 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"

Salve e feche esse arquivo e execute sudo update-grub. Isso garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, que pode auxiliar o suporte técnico do Azure com problemas de depuração.

  1. Confira se o servidor SSH está instalado e configurado para iniciar no tempo de inicialização. Geralmente, esse é o padrão.

  2. 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 walinuxagent pacote pode remover o NetworkManager e NetworkManager-gnome pacotes, se estiverem instalados.

  1. Remova as configurações padrão de 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
  1. Configure o 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
  1. Configure o Agente Linux do Azure para usar o cloud-init para executar o provisionamento. Confira o projeto WALinuxAgent para obter mais informações sobre essas opções.
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
  1. 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
  1. Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

Observação

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

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.

sudo waagent -force -deprovision+user
sudo rm -f ~/.bash_history
  1. Clique em Ação –> Desligar no Gerenciador do Hyper-V.

  2. 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. Confira a documentação para Convert-VHD aqui: Convert-VHD.

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

  4. Mude para o diretório boot do EFI:

cd /boot/efi/EFI
  1. Copie o diretório ubuntu para um novo diretório chamado boot:
sudo cp -r ubuntu/ boot
  1. Mude para o diretório boot recém-criado:
cd boot
  1. Renomeie o arquivo shimx64.efi:
sudo mv shimx64.efi bootx64.efi
  1. Renomeie o arquivo grub.cfg para bootx64.cfg:
sudo mv grub.cfg bootx64.cfg

Próximas etapas

Agora, você está pronto para usar o disco rígido virtual Ubuntu Linux para criar novas máquinas virtuais 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.