Preparar uma máquina virtual do SLES ou openSUSE para o Azure
Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis Aplica-se a: ✔️ Conjuntos de dimensionamento uniformes
Em alguns casos, talvez você queira usar o SUSE Linux Enterprise Server (SLES) personalizado ou VMs (máquinas virtuais) 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 o 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 arquivos .vhd. Por exemplo, você pode usar uma solução de virtualização, como o Hyper-V. Para obter instruções, veja 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 o Linux para o Azure, veja também as Notas de Instalação Geral do Linux.
- O Azure não dá suporte a arquivos de Imagem de Disco Rígido do Windows (.vhdx). Somente arquivos VHD (.vhd) têm suporte fora das máquinas virtuais. Você pode converter o disco em formato VHD usando o Gerenciador do Hyper-V ou o cmdlet
Convert-VHD
. - O Azure dá suporte a máquinas virtuais Gen1 (inicialização do BIOS) e Gen2 (inicialização de UEFI).
- O módulo de kernel da tabela de alocação de arquivo virtual (VFAT) deve estar habilitado no kernel.
- Não configure uma partição de permuta no disco do sistema operacional. O agente Linux pode ser configurado para criar um arquivo de permuta no disco de recursos temporários. As etapas posteriores neste artigo fornecem mais informações sobre como configurar o espaço de troca.
- 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 gerais de Instalação do Linux.
Observação
A versão 21.2 ou posterior do cloud-init remove o requisito de UDF (função definida pelo usuário). Mas sem o módulo udf
habilitado, o CD-ROM não será montado durante o provisionamento, o que impede que os dados personalizados sejam aplicados. Uma solução alternativa é aplicar os 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, confira Formatos de dados do usuário na documentação do cloud-init.
Use o SUSE Studio
SUSE Studio pode criar e gerenciar facilmente suas imagens SLES e openSUSE Leap no Azure e no 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, o 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 do Azure e do Hyper-V, se necessário.
Se o hipervisor de software não for Hyper-V, outros módulos precisarão ser adicionados ao disco de RAM inicial (initramfs) para serem inicializados 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 comando
dracut
para recompilar o arquivo initramfs:sudo dracut --verbose --force
Habilitar 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 baixar atualizações e instalar pacotes.
Atualize o sistema com os patches mais recentes:
sudo zypper update
Instale o Agente de VM do 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 o 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 do 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 de troca, uma opção é passar uma configuração do cloud-init sempre que você criar uma VM.
Outra opção é usar uma diretiva do cloud-init na imagem para configurar o espaço de troca 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
Antes, o Agente Linux do Azure era usado para configurar automaticamente o espaço de troca usando o disco de recurso local anexado à máquina virtual, depois que esta era provisionada no Azure. Como essa etapa agora é tratada pelo cloud-init, você não deve usar Agente Linux do Azure para formatar o disco de recursos ou criar o arquivo de troca. Use estes comandos para modificar o arquivo /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
Observação
Se você estiver usando uma versão do cloud-init anterior à 21.2, verifique se o módulo
udf
está habilitado. Remover ou desabilitar causará uma falha de provisionamento ou inicialização. O cloud-init versão 21.2 ou posterior remove o requisito da UDF.Verifique se o arquivo /etc/fstab faz referência ao disco usando seu UUID (
by-uuid
).Remova as regras de 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 provocam problemas ao clonar uma máquina virtual no Microsoft Azure ou no 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*
É recomendável editar o arquivo /etc/sysconfig/network/dhcp e alterar o parâmetro
DHCLIENT_SET_HOSTNAME
para o seguinte:DHCLIENT_SET_HOSTNAME="no"
No arquivo /etc/sudoers, exclua o comentário ou remova as seguintes linhas, se estiverem presentes:
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'!
Certifique-se de que o servidor SSH está instalado e configurado para iniciar no tempo de inicialização:
sudo systemctl enable sshd
Limpe a fase de cloud-init:
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ê está migrando uma máquina virtual específica e não quer 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.
No 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 Enabled Verificação de GPG Atualizar 1 Cloud:Tools_15.4 Cloud:Tools-> Yes (r ) Sim Sim 2 openSUSE_stable_OSS openSUSE_st-> Yes (r ) Sim Sim 3 openSUSE_stable_Updates openSUSE_st-> Yes (r ) Sim Yes Se a mensagem "Nenhum repositório definido" for exibida no
zypper lr
, os repositórios deverão 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 novamente o comando
zypper lr
. Se um dos repositórios de atualização relevantes não estiver habilitado, habilite-o com o comando a seguir: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 de GRUB para incluir mais parâmetros do kernel para o Azure. Para fazer isso, abra /boot/grub/menu.lst em um editor de texto e verifique se o kernel padrão inclui os seguintes parâmetros:
console=ttyS0 earlyprintk=ttyS0
Isto 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. Além disso, remova os seguintes parâmetros da linha de inicialização do kernel, se existirem:
libata.atapi_enabled=0 reserve=0x1f0,0x8
É recomendável editar o arquivo /etc/sysconfig/network/dhcp e alterar o parâmetro
DHCLIENT_SET_HOSTNAME
para a seguinte configuração:DHCLIENT_SET_HOSTNAME="no"
No arquivo /etc/sudoers, exclua o comentário ou remova as seguintes linhas, se estiverem presentes. Esta é uma etapa 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'!
Confira se o servidor SSH está instalado e configurado para iniciar no tempo de inicialização.
Não crie espaço de troca no disco do sistema operacional.
O Agente Linux do Azure pode configurar automaticamente o espaço de troca usando o disco de recurso local que é anexado à VM após o provisionamento no Azure. O disco de recurso local é um disco temporário e será esvaziado quando a VM é 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.
Verifique se o Agente Linux do Azure é executado durante a 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ê está migrando uma máquina virtual específica e não quer 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óximas etapas
Agora você está pronto para usar o VHD do SUSE 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.