Preparar uma máquina virtual SLES ou openSUSE Leap para o Azure
Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexíveis Aplica-se a: ✔️ Conjuntos de escala uniformes
Em alguns casos, talvez você queira usar máquinas virtuais (VMs) personalizadas do SUSE Linux Enterprise Server ou openSUSE Leap Linux em seu ambiente do Azure e ser capaz de criar esses tipos de VMs por meio da automação. Este artigo demonstra como criar e carregar um disco rígido virtual (VHD) personalizado do Azure que contém um sistema operacional SUSE Linux.
Pré-requisitos
Este artigo pressupõe que você já instalou um sistema operacional SLES ou openSUSE Leap Linux em um disco rígido virtual. Existem várias ferramentas para criar ficheiros .vhd. Por exemplo, você pode usar uma solução de virtualização como o Hyper-V. Para obter instruções, consulte Instalar o Hyper-V e criar uma máquina virtual.
Notas de instalação do SLES/openSUSE Leap
- Para obter mais dicas sobre como preparar imagens do Linux para o Azure, consulte Notas gerais de instalação do Linux.
- O Azure não suporta ficheiros de Imagem de Disco Rígido do Windows (.vhdx). Somente arquivos VHD (.vhd) são suportados fora das máquinas virtuais. Você pode converter o disco para o formato VHD usando o Gerenciador do Hyper-V ou o
Convert-VHD
cmdlet. - O Azure suporta máquinas virtuais Gen1 (inicialização do BIOS) e Gen2 (inicialização UEFI).
- O módulo do kernel da tabela de alocação de arquivos virtuais (VFAT) deve ser ativado no kernel.
- Não configure uma partição swap no disco do SO. Você pode configurar o agente Linux para criar um arquivo de permuta no disco de recurso temporário. As etapas mais adiante neste artigo fornecem mais informações sobre como configurar o espaço de permuta.
- Todos os VHDs no Azure devem ter um tamanho virtual alinhado a 1 MB. Ao converter de um disco bruto para VHD, verifique se o tamanho do disco bruto é um múltiplo de 1 MB antes da conversão. Para obter mais informações, consulte Notas gerais de instalação do Linux.
Nota
Cloud-init versão 21.2 ou posterior remove o requisito de função definida pelo usuário (UDF). Mas sem o udf
módulo ativado, o CD-ROM não será montado durante o provisionamento, o que impede que os dados personalizados sejam aplicados. Uma solução alternativa é aplicar dados do usuário. No entanto, ao contrário dos dados personalizados, os dados do usuário não são criptografados. Para obter mais informações, consulte Formatos de dados do usuário na documentação cloud-init.
Usar o SUSE Studio
O SUSE Studio pode facilmente criar e gerenciar suas imagens SLES e openSUSE Leap para Azure e Hyper-V. O SUSE Studio é a abordagem recomendada para personalizar suas próprias imagens SLES e openSUSE Leap.
Como alternativa à criação de seu próprio VHD, a SUSE também publica imagens BYOS (traga sua própria assinatura) para SLES no VM Depot.
Preparar o SLES para o Azure
Configure os módulos Azure e Hyper-V, se necessário.
Se o hipervisor de software não for Hyper-V, outros módulos precisarão ser adicionados ao disco RAM inicial (initramfs) para inicializar com êxito no Azure.
Edite o arquivo /etc/dracut.conf e adicione a seguinte linha ao arquivo:
add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Execute o
dracut
comando para reconstruir o arquivo initramfs:sudo dracut --verbose --force
Configure o console serial.
Para trabalhar com êxito com o console serial, você deve configurar várias variáveis no arquivo /etc/defaults/grub e recriar o GRUB no servidor:
# Add console=ttyS0 and earlyprintk=ttS0 to the variable. # Remove "splash=silent" and "quiet" options. GRUB_CMDLINE_LINUX_DEFAULT="audit=1 no-scroll fbcon=scrollback:0 mitigations=auto security=apparmor crashkernel=228M,high crashkernel=72M,low console=ttyS0 earlyprintk=ttyS0" # Add "console serial" to GRUB_TERMINAL. GRUB_TERMINAL="console serial" # Set the GRUB_SERIAL_COMMAND variable. GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
Registre seu sistema SUSE Linux Enterprise para permitir que ele baixe atualizações e instale pacotes.
Atualize o sistema com os patches mais recentes:
sudo zypper update
Instale o Agente de VM Linux do Azure (
waagent
) e o cloud-init:sudo SUSEConnect -p sle-module-public-cloud/15.2/x86_64 (SLES 15 SP2) sudo zypper refresh sudo zypper install python-azure-agent sudo zypper install cloud-init
Habilite
waagent
e cloud-init para iniciar na inicialização:sudo systemctl enable waagent sudo systemctl enable cloud-init-local.service sudo systemctl enable cloud-init.service sudo systemctl enable cloud-config.service sudo systemctl enable cloud-final.service sudo systemctl daemon-reload sudo cloud-init clean
Atualize a configuração cloud-init:
cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF
sudo cat <<EOF | sudo tee /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 # Make sure mounts and disk_setup are in the init stage: 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.cfg
Se você quiser montar, formatar e criar uma partição swap, uma opção é passar uma configuração cloud-init toda vez que criar uma VM.
Outra opção é usar uma diretiva cloud-init na imagem para configurar o espaço de permuta sempre que a VM for criada:
cat <<EOF | sudo tee -a /etc/systemd/system.conf 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' EOF 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"] - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF
Anteriormente, o Agente Linux do Azure era usado para configurar automaticamente o espaço de permuta usando o disco de recurso local anexado à máquina virtual depois que a máquina virtual é provisionada no Azure. Como o cloud-init agora lida com essa etapa, você não deve usar o Agente Linux do Azure para formatar o disco de recursos ou criar o arquivo de permuta. Use estes comandos para modificar /etc/waagent.conf adequadamente:
sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=auto/g' /etc/waagent.conf sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/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
Nota
Se estiver a utilizar uma versão cloud-init anterior à 21.2, certifique-se de que o
udf
módulo está ativado. Removê-lo ou desativá-lo causará uma falha de provisionamento ou inicialização. Cloud-init versão 21.2 ou posterior remove o requisito UDF.Certifique-se de que o arquivo /etc/fstab faça referência ao disco usando seu UUID (
by-uuid
).Remova as regras do udev e os arquivos de configuração do adaptador de rede para evitar a geração de regras estáticas para as interfaces Ethernet. Essas regras podem causar problemas quando você está clonando uma máquina virtual no Microsoft Azure ou Hyper-V.
sudo rm -f /etc/udev/rules.d/70-persistent-net.rules sudo rm -f /etc/udev/rules.d/85-persistent-net-cloud-init.rules sudo rm -f /etc/sysconfig/network/ifcfg-eth*
Recomendamos que você edite o arquivo /etc/sysconfig/network/dhcp e altere o
DHCLIENT_SET_HOSTNAME
parâmetro para o seguinte:DHCLIENT_SET_HOSTNAME="no"
No arquivo /etc/sudoers, comente ou remova as seguintes linhas, se existirem:
Defaults targetpw # Ask for the password of the target user i.e. root ALL ALL=(ALL) ALL # WARNING! Only use this setting together with 'Defaults targetpw'!
Verifique se o servidor Secure Shell (SSH) está instalado e configurado para iniciar no momento da inicialização:
sudo systemctl enable sshd
Limpe o estágio de inicialização da nuvem:
sudo cloud-init clean --seed --logs
Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure.
Se você estiver migrando uma máquina virtual específica e não quiser criar uma imagem generalizada, ignore a etapa de desprovisionamento.
sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo export HISTSIZE=0 sudo rm -f ~/.bash_history
Preparar o openSUSE 15.4+
No painel central do Gerenciador do Hyper-V, selecione a máquina virtual.
Selecione Conectar para abrir a janela da máquina virtual.
Em um terminal, execute o comando
zypper lr
. Se esse comando retornar uma saída semelhante ao exemplo a seguir, os repositórios serão configurados conforme o esperado e nenhum ajuste será necessário. (Os números de versão podem variar.)# Alias Nome Ativado(a) Verificação GPG Atualizar 1 Nuvem:Tools_15.4 Nuvem:Ferramentas-> Sim (r) Sim Sim 2 openSUSE_stable_OSS openSUSE_st-> Sim (r) Sim Sim 3 openSUSE_stable_Updates openSUSE_st-> Sim (r) Sim Sim Se a mensagem "Nenhum repositório definido" aparecer a
zypper lr
partir dos repositórios devem ser adicionados manualmente.Abaixo estão exemplos de comandos para adicionar esses repositórios (versões e links podem variar):
sudo zypper ar -f https://download.opensuse.org/update/openSUSE-stable openSUSE_stable_Updates sudo zypper ar -f https://download.opensuse.org/repositories/Cloud:/Tools/15.4 Cloud:Tools_15.4 sudo zypper ar -f https://download.opensuse.org/distribution/openSUSE-stable/repo/oss openSUSE_stable_OSS
Em seguida, você pode verificar se os repositórios foram adicionados executando o comando
zypper lr
novamente. Se um dos repositórios de atualização relevantes não estiver habilitado, habilite-o usando o seguinte comando:sudo zypper mr -e [NUMBER OF REPOSITORY]
Atualize o kernel para a versão mais recente disponível:
sudo zypper up kernel-default
Ou atualize o sistema operacional com todos os patches mais recentes:
sudo zypper update
Instale o Agente Linux do Azure:
sudo zypper install WALinuxAgent
Modifique a linha de inicialização do kernel em sua configuração do GRUB para incluir outros parâmetros do kernel para o Azure. Para fazer isso, abra /boot/grub/menu.lst em um editor de texto e certifique-se de que o kernel padrão inclua os seguintes parâmetros:
console=ttyS0 earlyprintk=ttyS0
Essa opção garante que todas as mensagens do console sejam enviadas para a primeira porta serial, o que pode ajudar o suporte do Azure com problemas de depuração. Além disso, remova os seguintes parâmetros da linha de inicialização do kernel, se existirem:
libata.atapi_enabled=0 reserve=0x1f0,0x8
Recomendamos que você edite o arquivo /etc/sysconfig/network/dhcp e altere o
DHCLIENT_SET_HOSTNAME
parâmetro para a seguinte configuração:DHCLIENT_SET_HOSTNAME="no"
No arquivo /etc/sudoers, comente ou remova as seguintes linhas, se existirem. Este é um passo importante.
Defaults targetpw # ask for the password of the target user i.e. root ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
Certifique-se de que o servidor SSH está instalado e configurado para iniciar no momento da inicialização.
Não crie espaço de permuta no disco do SO.
O Agente Linux do Azure pode configurar automaticamente o espaço de permuta usando o disco de recurso local anexado à VM após o provisionamento no Azure. O disco de recurso local é um disco temporário e será esvaziado quando a VM for desprovisionada.
Depois de instalar o Agente Linux do Azure, modifique os parâmetros em /etc/waagent.conf da seguinte maneira:
ResourceDisk.Format=n ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=n ResourceDisk.SwapSizeMB=2048 ## NOTE: set the size to whatever you need it to be.
Certifique-se de que o Agente Linux do Azure seja executado na inicialização:
sudo systemctl enable waagent.service
Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure.
Se você estiver migrando uma máquina virtual específica e não quiser criar uma imagem generalizada, ignore a etapa de desprovisionamento.
sudo rm -f ~/.bash_history # Remove current user history sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history # Remove root user history sudo export HISTSIZE=0
Selecione Ação>Desligar no Gerenciador do Hyper-V.
Próximos passos
Agora você está pronto para usar seu VHD do SUSE Linux para criar novas máquinas virtuais no Azure. Se esta for a primeira vez que você carrega o arquivo .vhd no Azure, consulte Criar uma VM Linux a partir de um disco personalizado.