Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível
O acordo de nível de serviço (SLA) da plataforma Azure aplica-se às máquinas virtuais (VMs) que executam o sistema operativo Linux apenas quando está a usar uma das distribuições endossadas. Para distribuições endossadas, o Azure Marketplace fornece imagens Linux pré-configuradas. Para obter mais informações, consulte:
Todas as outras distribuições a correr no Azure, incluindo distribuições apoiadas pela comunidade e não endossadas, têm alguns pré-requisitos.
Este artigo foca-se em orientações gerais para executar a sua distribuição Linux no Azure. Este artigo não pode ser abrangente, porque cada distribuição é diferente. Mesmo que cumpra todos os critérios que este artigo descreve, pode ser necessário ajustar significativamente o seu sistema Linux para que funcione corretamente.
Notas gerais de instalação do Linux
Azure não suporta o formato Hyper-V disco rígido virtual (VHDX). O Azure suporta apenas VHD fixo. Pode converter o disco para formato VHD usando Hyper-V Manager ou o cmdlet Convert-VHD. Se estiveres a usar o VirtualBox, seleciona Tamanho Fixo em vez do padrão (Alocado Dinamicamente) ao criar o disco.
O Azure suporta máquinas virtuais Gen1 (arranque BIOS) e Gen2 (arranque UEFI).
O módulo do kernel da tabela virtual de alocação de ficheiros (VFAT) deve estar ativado no kernel.
O tamanho máximo permitido para o VHD é de 1.023 GB.
Ao instalar o sistema Linux, recomendamos que use partições padrão em vez do Logical Volume Manager (LVM). O LVM é o padrão para muitas instalações.
Usar partições padrão evitará conflitos de nomes LVM com VMs clonadas, especialmente se um disco do sistema operativo for ligado a outra VM idêntica para resolução de problemas. Pode usar LVM ou RAID em discos de dados.
É necessário o suporte do kernel para montar sistemas de ficheiros de função definida pelo utilizador (UDF). No primeiro arranque no Azure, a configuração de provisionamento é passada para a VM Linux através de media formatada em UDF que está ligada ao convidado. O agente Azure Linux deve montar o sistema de ficheiros UDF para ler a sua configuração e provisionar a VM.
As versões do kernel Linux anteriores à 2.6.37 não suportam Acesso à Memória Não Uniforme (NUMA) em Hyper-V com VMs de maior dimensão. Este problema afeta principalmente distribuições mais antigas que utilizam o kernel upstream Red Hat 2.6.32. Foi corrigido no Red Hat Enterprise Linux (RHEL) 6.6 (kernel-2.6.32-504).
Sistemas a executar kernels personalizados anteriores à 2.6.37, ou kernels baseados em RHEL anteriores à 2.6.32-504, devem definir o parâmetro
numa=offde arranque na linha de comandos do kernel em grub.conf. Para obter mais informações, consulte Red Hat KB 436883.Não configures uma partição swap no disco do sistema operativo. Pode configurar o agente Linux para criar um ficheiro de swap no disco de recurso temporário, conforme descrito mais adiante neste artigo.
Todos os VHDs no Azure devem ter um tamanho virtual alinhado a 1 MB (1024 x 1024 bytes). Quando estiver a converter de um disco bruto para VHD, certifique-se de que o tamanho bruto do disco é múltiplo de 1 MB antes da conversão, conforme descrito mais adiante neste artigo.
Use a versão da distribuição, os pacotes e o software mais atualizados.
Remover utilizadores e contas do sistema, chaves públicas, dados sensíveis, software e aplicações desnecessários.
Note
A versão 21.2 ou posterior do cloud-init remove o requisito UDF. Mas sem o udf módulo ativado, o CD-ROM não monta durante o provisionamento, o que impede que os dados personalizados sejam aplicados. Uma solução alternativa é aplicar dados do utilizador. No entanto, ao contrário dos dados personalizados, os dados do utilizador não estão encriptados. Para mais informações, consulte formatos de dados de utilizador na documentação cloud-init.
Instale módulos do kernel sem Hyper-V
Azure corre no hipervisor Hyper-V, por isso o Linux exige que certos módulos do kernel corram em Azure. Se tiveres uma VM criada fora do Hyper-V, os instaladores Linux podem não incluir os drivers para Hyper-V no disco RAM inicial (initrd ou initramfs), a menos que a VM detete que está a correr num ambiente Hyper-V.
Quando estás a usar um sistema de virtualização diferente (como o VirtualBox ou o KVM) para preparar a tua imagem Linux, poderás ter de reconstruir o initrd para que, pelo menos, os módulos do kernel hv_vmbus e hv_storvsc estejam disponíveis no disco RAM inicial. Este problema conhecido aplica-se a sistemas baseados na distribuição upstream do Red Hat, e possivelmente a outros.
O mecanismo para reconstruir a imagem initrd ou initramfs pode variar, dependendo da distribuição. Consulte a documentação correspondente ou o suporte técnico da sua distribuição para obter o procedimento adequado. Aqui está um exemplo para reconstruir o Initrd usando a mkinitrd utilidade:
Faça backup da imagem original existente:
cd /boot sudo cp initrd-`uname -r`.img initrd-`uname -r`.img.bakReconstrua o initrd utilizando os módulos do kernel
hv_vmbusehv_storvsc:sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
Redimensionar VHDs
As imagens VHD no Azure devem ter um tamanho virtual alinhado a 1 MB. Normalmente, os VHDs criados através de Hyper-V estão alinhados corretamente. Se o VHD não estiver alinhado corretamente, pode receber uma mensagem de erro semelhante ao exemplo seguinte quando tentar criar uma imagem a partir do seu VHD:
The VHD http://<mystorageaccount>.blob.core.windows.net/vhds/MyLinuxVM.vhd has an unsupported virtual size of 21475270656 bytes. The size must be a whole number (in MBs).
Neste caso, redimensione a VM usando a consola Hyper-V Manager ou o cmdlet PowerShell Redimension-VHD. Se não estiver a correr num ambiente Windows, recomendamos usar qemu-img para converter (se necessário) e redimensionar o VHD.
Note
Há um bug conhecido no qemu-img para a versão 2.2.1 do QEMU e algumas versões posteriores que resulta num VHD mal formatado. O problema foi corrigido no QEMU 2.6. Recomendamos usar a versão 2.2.0 ou anterior, ou a versão 2.6 ou posterior.
Redimensionar diretamente o VHD utilizando ferramentas como
qemu-imgouvbox-managepode resultar num VHD não arrancável. Recomendamos primeiro converter o VHD para uma imagem de disco raw usando o seguinte código.Se a imagem da VM foi criada como imagem de disco bruto, podes saltar este passo. Criar a imagem da VM como imagem de disco bruto é o padrão em alguns hipervisores, como o KVM.
sudo qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.rawCalcule o tamanho necessário da imagem de disco para que o tamanho virtual fique alinhado a 1 MB. O seguinte script shell Bash usa
qemu-img infopara determinar o tamanho virtual da imagem de disco, e depois calcula o tamanho para o próximo 1 MB:rawdisk="MyLinuxVM.raw" vhddisk="MyLinuxVM.vhd" MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "$rawdisk" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$(((($size+$MB-1)/$MB)*$MB)) echo "Rounded Size = $rounded_size"Redimensione o disco bruto usando
$rounded_size:sudo qemu-img resize MyLinuxVM.raw $rounded_sizeConverter o disco bruto de volta para um VHD de tamanho fixo:
sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc MyLinuxVM.raw MyLinuxVM.vhdOu, com versões do QEMU anteriores à 2.6, remover a
force_sizeopção:sudo qemu-img convert -f raw -o subformat=fixed -O vpc MyLinuxVM.raw MyLinuxVM.vhd
Requisitos do kernel Linux
Os controladores dos Serviços de Integração Linux (LIS) para Hyper-V e Azure são integrados diretamente no kernel principal do Linux. Muitas distribuições que incluem uma versão recente do kernel Linux (como a 3.x) já têm estes drivers disponíveis, ou de outra forma fornecem versões retroportadas desses drivers com os seus kernels.
Os drivers LIS estão constantemente a ser atualizados no kernel principal com correções e novas funcionalidades. Sempre que possível, recomendamos executar uma distribuição endossada que inclua estas correções e atualizações.
Se estiver a usar uma variante do RHEL, nas versões 6.0 a 6.3, tem de instalar os drivers LIS mais recentes para Hyper-V. A partir do RHEL 6.4+ (e derivados), os drivers LIS já estão incluídos no kernel, por isso não precisas de pacotes de instalação adicionais.
Se for necessário um kernel personalizado, recomendamos uma versão recente do kernel (como a 3.8+). Para distribuições ou fornecedores que mantêm o seu próprio kernel, é necessário retroportar regularmente os controladores LIS do kernel principal para o seu kernel personalizado.
Mesmo que já esteja a usar uma versão do kernel relativamente recente, recomendamos vivamente que acompanhe eventuais correções introduzidas a montante nos controladores LIS e as retroporte conforme necessário. As localizações dos ficheiros fonte do driver LIS são especificadas no ficheiro MAINTAINERS na árvore de código-fonte do kernel Linux:
F: arch/x86/include/asm/mshyperv.h
F: arch/x86/include/uapi/asm/hyperv.h
F: arch/x86/kernel/cpu/mshyperv.c
F: drivers/hid/hid-hyperv.c
F: drivers/hv/
F: drivers/input/serio/hyperv-keyboard.c
F: drivers/net/hyperv/
F: drivers/scsi/storvsc_drv.c
F: drivers/video/fbdev/hyperv_fb.c
F: include/linux/hyperv.h
F: tools/hv/
O kernel ativo da VM deve incluir os seguintes patches. Esta lista não pode estar completa para todas as distribuições.
- ata_piix: transfere os discos para os drivers de Hyper-V por defeito
- storvsc: Contabilizar os pacotes em trânsito no caminho RESET
- STORVSC: Evite o uso de WRITE_SAME
- storvsc: Desative o WRITE SAME para RAID e drivers do adaptador de host virtual
- storvsc: correcção de desreferência do ponteiro NULL
- STORVSC: Falhas do anel buffer podem resultar em congelamento de I/O
- scsi_sysfs: proteger contra a dupla execução de __scsi_remove_device
Agente Linux do Azure
O Azure Linux Agent (waagent) prevê uma máquina virtual Linux em Azure. Pode obter a versão mais recente, reportar problemas ou submeter pull requests no Linux Agent GitHub repositório.
Aqui estão algumas considerações para usar o Azure Linux Agent:
- O agente Linux é lançado sob a licença Apache 2.0. Muitas distribuições já fornecem pacotes .rpm ou .deb para o agente. Pode instalar e atualizar facilmente estes pacotes.
- O Azure Linux Agent requer Python v2.6+.
- O agente também necessita do
python-pyasn1módulo. A maioria das distribuições fornece este módulo como um pacote separado para ser instalado. - Em alguns casos, o Azure Linux Agent pode não ser compatível com o NetworkManager. Muitos dos pacotes (.rpm ou .deb) fornecidos pelas distribuições configuram o NetworkManager como um conflito com o
waagentpacote. Nestes casos, o agente desinstala o NetworkManager quando instala o pacote do agente Linux. - O Azure Linux Agent deve estar igual ou acima da versão mínima suportada.
Note
Certifica-te de que os udf módulos e vfat estão ativados. Desativar o udf módulo causará uma falha de provisionamento. Desativar o vfat módulo causa falhas tanto no provisionamento como no arranque. Cloud-init versão 21.2 ou posterior pode provisionar VMs sem necessidade de UDF se ambas as condições existirem:
- Criaste a VM usando chaves públicas SSH e não palavras-passe.
- Não forneceste quaisquer dados personalizados.
Requisitos gerais do sistema Linux
Modifique a linha de inicialização do kernel no GRUB ou GRUB2 para incluir os seguintes parâmetros, para que todas as mensagens do console sejam enviadas para a primeira porta serial. Estas mensagens podem ajudar o suporte do Azure a depurar quaisquer problemas.
GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"Recomendamos também a remoção dos seguintes parâmetros, caso existam:
rhgb quiet crashkernel=autoO arranque gráfico e silencioso não são úteis num ambiente na cloud, onde queres que todos os registos sejam enviados para a porta serial. Pode deixar a
crashkernelopção configurada se necessário, mas este parâmetro reduz a quantidade de memória disponível na VM em pelo menos 128 MB. Reduzir a memória disponível pode ser problemático para VMs de tamanhos mais pequenos.Depois de terminares de editar /etc/default/grub, executa o seguinte comando para reconstruir a configuração do GRUB:
sudo grub2-mkconfig -o /boot/grub2/grub.cfgAdicione o módulo Hyper-V para initramfs usando
dracut:cd /boot sudo cp initramfs-<kernel-version>.img <kernel-version>.img.bak sudo dracut -f -v initramfs-<kernel-version>.img <kernel-version> --add-drivers "hv_vmbus hv_netvsc hv_storvsc" sudo grub-mkconfig -o /boot/grub/grub.cfg sudo grub2-mkconfig -o /boot/grub2/grub.cfgAdicione o módulo Hyper-V para initrd usando
mkinitramfs:cd /boot sudo cp initrd.img-<kernel-version> initrd.img-<kernel-version>.bak sudo mkinitramfs -o initrd.img-<kernel-version> <kernel-version> --with=hv_vmbus,hv_netvsc,hv_storvsc sudo update-grubCertifique-se de que o servidor SSH está instalado e configurado para iniciar no momento da inicialização. Esta configuração é geralmente a padrão.
Instala o Azure Linux Agent.
O Azure Linux Agent é necessário para provisionar uma imagem Linux no Azure. Muitas distribuições fornecem o agente como um pacote .rpm ou .deb. O pacote é normalmente chamado
WALinuxAgentouwalinuxagent. Também pode instalar o agente manualmente seguindo os passos do guia Azure Linux Agent.Note
Certifica-te de que os
udfmódulos evfatestão ativados. Removê-los ou desativá-los pode causar uma falha de provisionamento ou de arranque. A versão 21.2 ou posterior do cloud-init remove o requisito UDF.Instale o Azure Linux Agent, o cloud-init e outras utilidades necessárias executando um dos seguintes comandos.
Use este comando para Red Hat ou CentOS:
sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemonsUse este comando para Ubuntu/Debian:
sudo apt install walinuxagent cloud-init cloud-utils-growpart gdisk hyperv-daemonsUse este comando para a SUSE:
sudo zypper install python-azure-agent cloud-init cloud-utils-growpart gdisk hyperv-daemonsDepois ativa o agente e o cloud-init em todas as distribuições:
sudo systemctl enable waagent.service sudo systemctl enable cloud-init.serviceNão cries espaço de troca no disco do sistema operativo.
Podes usar o Azure Linux Agent ou o cloud-init para configurar swap space através do disco de recurso local. Este disco de recurso é ligado à VM após o provisionamento no Azure. O disco de recurso local é um disco temporário e pode ser esvaziado quando a VM é desprovisionada. Os blocos seguintes mostram como configurar esta troca.
Se escolheres Azure Linux Agent, modifica os seguintes parâmetros em /etc/waagent.conf:
ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: Set this to your desired size.Se escolher cloud-init, configure o cloud-init para gerir o provisionamento:
sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/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.confPara configurar o cloud-init para formatar e criar espaço de troca, tens duas opções:
- Forneça uma configuração cloud-init sempre que criar uma VM através de
customdata. Recomendamos este método. - Utilize uma diretiva cloud-init na imagem para configurar o espaço de swap sempre que a VM for criada.
Crie um ficheiro .cfg para configurar swap space usando cloud-init:
echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' | sudo tee -a /etc/systemd/system.conf cat << EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg #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- Forneça uma configuração cloud-init sempre que criar uma VM através de
Configure o cloud-init para gerir o provisionamento:
Configurar
waagentpara cloud-init:sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/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.confSe estiveres a migrar uma máquina virtual específica e não quiseres criar uma imagem generalizada, define
Provisioning.Agent=disableda configuração /etc/waagent.conf .Configurar pontos de montagem:
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.cfgConfigure a fonte de dados do Azure:
echo "Allow only Azure datasource, disable fetching network setting via IMDS" cat << EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOFRemova o ficheiro de swap existente se tiver configurado um:
if [[ -f /mnt/resource/swapfile ]]; then echo "Removing swapfile" #RHEL uses a swap file by default swapoff /mnt/resource/swapfile rm /mnt/resource/swapfile -f fiConfigure o registo do cloud-init:
echo "Add console log file" cat << EOF | sudo tee -a /etc/cloud/cloud.cfg.d/05_logging.cfg # 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
Execute os seguintes comandos para desprovisionar a máquina virtual.
Atenção
Se estás a migrar uma máquina virtual específica e não quiseres criar uma imagem generalizada, salta a etapa de desprovisionamento. Executar o comando
waagent -force -deprovision+usertorna a máquina de origem inutilizável. Esta etapa destina-se apenas a criar uma imagem generalizada.sudo rm -f /var/log/waagent.log sudo cloud-init clean sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0No VirtualBox, pode aparecer uma mensagem de erro após a execução
waagent -force -deprovisionque diz[Errno 5] Input/output error. Esta mensagem de erro não é crítica e pode ignorá-la.Desliga a máquina virtual e carrega o VHD para o Azure.
Passos seguintes
Crie uma VM Linux a partir de um disco personalizado usando o CLI do Azure