Prepare an Ubuntu virtual machine for Azure (Preparar uma máquina virtual Ubuntu para o Azure)

Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível

O Ubuntu agora publica VHDs oficiais do Azure para download em https://cloud-images.ubuntu.com/. Se você precisar criar sua própria imagem especializada do Ubuntu para o Azure, em vez de usar o procedimento manual abaixo, é recomendável começar com esses VHDs de trabalho conhecidos e personalizar conforme necessário. Os últimos lançamentos de imagens podem sempre ser encontrados nos seguintes locais:

Pré-requisitos

Este artigo pressupõe 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

  • Consulte também Notas Gerais de Instalação do Linux para obter mais dicas sobre como preparar o Linux para o Azure.
  • O formato VHDX não é suportado no Azure, apenas VHD fixo. Você pode converter o disco para o formato VHD usando o Gerenciador do Hyper-V ou o Convert-VHD cmdlet.
  • 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 evitará conflitos de nome LVM com VMs clonadas, especialmente se um disco do sistema operacional precisar ser conectado a outra VM para solução de problemas. LVM ou RAID podem ser usados em discos de dados, se preferir.
  • Não configure uma partição swap ou um ficheiro de permuta 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 recurso temporário. Mais informações sobre isso podem ser encontradas nas etapas abaixo.
  • Todos os VHDs no Azure devem ter um tamanho virtual alinhado a 1MB. Ao converter de um disco bruto para VHD, você deve garantir que o tamanho do disco bruto seja um múltiplo de 1MB antes da conversão. Consulte Notas de instalação do Linux para obter mais informações.

Passos manuais

Nota

Antes de https://cloud-images.ubuntu.com/ tentar criar sua própria imagem personalizada do Ubuntu para o Azure, considere usar as imagens pré-criadas e testadas.

  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 do 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 Ubuntu Azure agora estão usando o kernel personalizado do Azure. Atualize o sistema operacional para o kernel personalizado do Azure mais recente e instale as ferramentas do Azure Linux (incluindo 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 do kernel para o Grub para incluir parâmetros adicionais do 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 este arquivo e execute sudo update-grub. Isso garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, o que pode ajudar o suporte técnico do Azure com problemas de depuração.

  1. Certifique-se de que o servidor SSH está instalado e configurado para iniciar no momento da inicialização. Este é geralmente o padrão.

  2. Instale o cloud-init (o agente de provisionamento) e o Agente Linux do Azure (o manipulador de extensões convidadas). O Cloud-init é usado netplan para configurar a configuração de rede do sistema (durante o provisionamento e cada inicialização subsequente) e gdisk para particionar discos de recursos.

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

Nota

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

  1. Remova as configurações padrão de inicialização na nuvem e os artefatos remanescentes netplan que podem entrar em conflito com o provisionamento de inicialização na nuvem 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 confiar no cloud-init para executar o provisionamento. Dê uma olhada no 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 artefatos e logs de tempo de execução do agente Linux do Azure e 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 seguintes comandos para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

Nota

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

Aviso

O desprovisionamento usando o comando acima não garante que a imagem seja limpa de todas as informações confidenciais e seja 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 só aceita VHDs de tamanho fixo. Se o disco do sistema operacional da VM não for um VHD de tamanho fixo, use o Convert-VHD cmdlet do PowerShell e especifique a -VHDType Fixed opção. Por favor, dê uma olhada nos documentos para Convert-VHD aqui: Convert-VHD.

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

  4. Altere o diretório para o diretório EFI de inicialização:

cd /boot/efi/EFI
  1. Copie o diretório ubuntu para um novo diretório chamado boot:
sudo cp -r ubuntu/ boot
  1. Altere o diretório para o diretório de inicialização 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óximos passos

Agora você está pronto para usar seu disco rígido virtual Ubuntu Linux para criar novas máquinas virtuais no Azure. Se esta for a primeira vez que você está carregando o arquivo .vhd no Azure, consulte Criar uma VM Linux a partir de um disco personalizado.