Preparar uma máquina virtual baseada em CentOS para o Azure
Cuidado
Este artigo faz referência ao CentOS, uma distribuição do Linux que está se aproximando do status de EOL (fim da vida útil). Considere seu uso e planeje adequadamente. Para obter mais informações, veja as Diretrizes sobre fim da vida útil do CentOS.
Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis
Saiba como criar e carregar um VHD (disco rígido virtual) do Azure que contenha um sistema operacional Linux baseado em CentOS.
- Preparar uma máquina virtual CentOS 6.x para o Azure
- Preparar uma máquina virtual CentOS 7.0 ou posterior para o Azure
Pré-requisitos
Este artigo pressupõe que você já instalou um sistema operacional Linux CentOS (ou derivado similar) 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 CentOS
- Para obter mais dicas sobre como preparar o Linux para o Azure, veja Notas de Instalação Geral do Linux.
- 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. Se você estiver usando o VirtualBox, significa que você selecionar Tamanho fixo em vez do padrão alocado dinamicamente durante a criação do disco.
- O módulo de kernel vfat precisa ser habilitado no kernel
- Ao instalar o sistema Linux, recomendamos que você use partições padrão em vez de LVM (que costuma ser 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 idêntica para solução de problemas. LVM ou RAID podem ser usados nos discos de dados.
- O suporte do kernel para a montagem de sistemas de arquivos UDF é necessário. Na primeira inicialização no Azure, a configuração de provisionamento é passada para a VM do Linux usando a mídia em formato UDF anexada ao convidado. O agente Linux do Azure ou o cloud-init deve montar o sistema de arquivos UDF para ler a configuração e provisionar a VM.
- Versões de kernel do Linux abaixo de 2.6.37 não dão suporte ao NUMA no Hyper-V com tamanhos maiores de VM. Esse problema afeta principalmente as distribuições mais antigas que usam o kernel Centos 2.6.32 upstream e foi corrigido no Centos 6.6 (kernel-2.6.32-504). Sistemas que executam kernels personalizados anteriores à versão 2.6.37 ou baseados em RHEL anteriores à versão 2.6.32-504 precisam definir o parâmetro de inicialização
numa=off
na linha de comando do kernel em grub.conf. Para obter mais informações, consulte o KB 436883 do Red Hat. - Não configure uma partição de permuta no disco do sistema operacional.
- 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.
Observação
O cloud-init >= 21.2 remove o requisito udf. No entanto, sem o módulo udf habilitado, o cd-rom não será montado durante o provisionamento, impedindo que dados personalizados sejam aplicados. Uma solução alternativa para isso é aplicar dados personalizados usando dados do usuário. No entanto, ao contrário dos dados personalizados, os dados do usuário não são criptografados. https://cloudinit.readthedocs.io/en/latest/topics/format.html
CentOS 6.x
Importante
Observe que o CentOS 6 atingiu o Fim da Vida Útil (EOL) e não tem mais suporte da comunidade CentOS. Isso significa que nenhuma atualização adicional ou patches de segurança serão lançados para esta versão, deixando-a vulnerável a possíveis riscos de segurança. É altamente recomendável atualizar para uma versão mais recente do CentOS para garantir a segurança e a estabilidade do seu sistema. Consulte o departamento de TI ou o administrador do sistema para obter mais assistência.
No Gerenciador do Hyper-V, selecione a máquina virtual.
Clique em Conectar para abrir a janela do console para a máquina virtual.
No CentOS 6, NetworkManager pode interferir com o agente Linux do Azure. Desinstale este pacote ao executar o seguinte comando:
sudo rpm -e --nodeps NetworkManager
Crie ou edite o arquivo
/etc/sysconfig/network
e adicione o texto a seguir:NETWORKING=yes HOSTNAME=localhost.localdomain
Crie ou edite o arquivo
/etc/sysconfig/network-scripts/ifcfg-eth0
e adicione o texto a seguir:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
Modifique as regras de udev para evitar a geração de regras estáticas das interfaces Ethernet. Essas regras podem provocar problemas ao clonar uma máquina virtual no Microsoft Azure ou no Hyper-V:
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
Certifique-se de que o serviço de rede será iniciado na inicialização executando o seguinte comando:
sudo chkconfig network on
Se quiser usar os espelhos OpenLogic hospedados em datacenters do Azure, substitua o arquivo
/etc/yum.repos.d/CentOS-Base.repo
pelos repositórios a seguir. Isso também adicionará o repositório [openlogic], que inclui pacotes adicionais como o agente Linux do Azure:[openlogic] name=CentOS-$releasever - openlogic packages for $basearch baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/ enabled=1 gpgcheck=0 [base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #released updates [updates] name=CentOS-$releasever - Updates #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #contrib - packages by Centos Users [contrib] name=CentOS-$releasever - Contrib #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/contrib/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Observação
O restante deste guia parte do pressuposto de que você esteja usando, no mínimo, o repositório
[openlogic]
, que será usado para instalar o agente Linux do Azure abaixo.Adicione a seguinte linha a /etc/yum.conf:
http_caching=packages
Execute o seguinte comando para limpar os metadados atuais do yum e atualizar o sistema com os pacotes mais recentes:
sudo yum clean all
A menos que você esteja criando uma imagem para uma versão mais antiga do CentOS, recomendamos atualizar todos os pacotes para a versão mais recente:
sudo yum -y update
Pode ser necessária uma reinicialização depois de executar esse comando.
(Opcional) Instale os drivers dos LIS (Serviços de Integração do Linux).
Importante
A etapa é necessária para CentOS 6.3 e anteriores e opcionais para versões posteriores.
sudo rpm -e hypervkvpd ## (may return error if not installed, that's OK) sudo yum install microsoft-hyper-v
Como alternativa, você pode seguir as instruções de instalação manual página de download do LIS para instalar o RPM para sua VM.
Instale o Agente Linux do Azure e as dependências. Inicie e habilite o serviço waagent:
sudo yum install python-pyasn1 WALinuxAgent sudo service waagent start sudo chkconfig waagent on
A instalação do pacote WALinuxAgent removerá o NetworkManager e os pacotes NetworkManager-gnome se eles já não tiverem sido removidos conforme descrito na etapa 3.
Modifique a linha de inicialização do kernel em sua configuração de grub para incluir parâmetros adicionais de 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 rootdelay=300
Isso também garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, que pode auxiliar o suporte do Azure com problemas de depuração.
Além dos itens acima, recomendamos remover os seguintes parâmetros:
rhgb quiet crashkernel=auto
O Gráfico e o
quiet boot
não são úteis em ambientes de rede, quando queremos que todos os logs sejam enviados para a porta serial. Você pode deixar a opçãocrashkernel
configurada, mas esse parâmetro reduz a memória disponível na VM em 128 MB ou mais, o que pode ser um problema em máquinas virtuais menores.Importante
CentOS 6.5 e anteriores também devem definir o parâmetro de kernel
numa=off
. Consulte Red Hat KB 436883.Confira se o servidor SSH está instalado e configurado para iniciar no tempo de inicialização. Geralmente, esse é o padrã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 permuta 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 pode ser esvaziado quando a VM é desprovisionada. Depois de instalar o Agente Linux do Azure (confira a etapa anterior), modifique adequadamente 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 whatever you need it to be.
Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:
sudo waagent -force -deprovision+user sudo export HISTSIZE=0
Observação
Se você estiver migrando uma máquina virtual específica e não quiser criar uma imagem generalizada, ignore a etapa de desprovisionamento.
- Clique em Ação –> Desligar no Gerenciador do Hyper-V. Agora, seu VHD Linux está pronto para ser carregado no Azure.
CentOS 7.0+
Alterações no CentOS 7 (e em derivativos similares)
A preparação de uma máquina virtual CentOS 7 para o Azure é semelhante à da CentOS 6, mas existem diversas diferenças significativas que devem ser ressaltadas:
O pacote do NetworkManager não entra mais em conflito com o agente Linux do Azure. Esse pacote é instalado por padrão e recomendamos que não seja removido.
O GRUB2 agora é usado como carregador de inicialização padrão. Com isso, o procedimento de edição de parâmetros do kernel mudou (confira abaixo).
O XFS agora é o sistema de arquivos padrão. Ainda é possível usar o sistema de arquivos ext4 se você preferir.
Como o CentOS 8 Stream e versões mais recentes não incluem mais o
network.service
por padrão, você precisará instalá-lo manualmente:sudo yum install network-scripts sudo systemctl enable network.service
Etapas da configuração
No Gerenciador do Hyper-V, selecione a máquina virtual.
Clique em Conectar para abrir a janela do console para a máquina virtual.
Crie ou edite o arquivo
/etc/sysconfig/network
e adicione o texto a seguir:NETWORKING=yes HOSTNAME=localhost.localdomain
Crie ou edite o arquivo
/etc/sysconfig/network-scripts/ifcfg-eth0
e adicione o texto a seguir:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no NM_CONTROLLED=no
Modifique as regras de udev para evitar a geração de regras estáticas das interfaces Ethernet. Essas regras podem provocar problemas ao clonar uma máquina virtual no Microsoft Azure ou no Hyper-V:
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
Se quiser usar os espelhos OpenLogic hospedados em datacenters do Azure, substitua o arquivo
/etc/yum.repos.d/CentOS-Base.repo
pelos repositórios a seguir. Essa ação adiciona o repositório [openlogic] que inclui pacotes para o agente Linux do Azure:[openlogic] name=CentOS-$releasever - openlogic packages for $basearch baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/ enabled=1 gpgcheck=0 [base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates [updates] name=CentOS-$releasever - Updates #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Observação
O restante deste guia parte do pressuposto de que você esteja usando, no mínimo, o repositório
[openlogic]
, que será usado para instalar o agente Linux do Azure abaixo.Execute o comando a seguir para limpar os metadados atuais do yum e instalar atualizações:
sudo yum clean all
A menos que você esteja criando uma imagem para uma versão mais antiga do CentOS, recomendamos atualizar todos os pacotes para a versão mais recente:
sudo yum -y update
Pode ser necessária uma reinicialização depois de executar esse comando.
Modifique a linha de inicialização do kernel em sua configuração de grub para incluir parâmetros adicionais de kernel para o Azure. Para fazer isso, abra
/etc/default/grub
em um editor de texto e edite o parâmetroGRUB_CMDLINE_LINUX
, por exemplo:GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
Isso também garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, que pode auxiliar o suporte do Azure com problemas de depuração. Ele também desativa novas convenções de nomenclatura do CentOS 7 para NICs. Além dos itens acima, recomendamos remover os seguintes parâmetros:
rhgb quiet crashkernel=auto
As inicializações gráfica e silenciosa não são úteis em um ambiente de rede, quando queremos que todos os logs sejam enviados para a porta serial. Você pode deixar a opção
crashkernel
configurada, mas esse parâmetro reduz a memória disponível na VM em 128 MB ou mais, o que pode ser um problema em VMs menores.Depois de editar
/etc/default/grub
como mostrado acima, execute o comando a seguir para recompilar a configuração do grub:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Observação
Se estiver carregando uma VM habilitada para UEFI, o comando para atualizar o grub será grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
. Além disso, o módulo de kernel do vfat deve ser habilitado no kernel. Caso contrário, o provisionamento falhará.
Verifique se o módulo "udf" está habilitado. Removê-los/desabilitá-los causará uma falha de provisionamento/inicialização. (_Cloud-init >= 21,2 remove o requisito udf. Leia a parte superior do documento para obter mais detalhes.)
Se estiver compilando a imagem de VMware, VirtualBox ou KVM: assegure-se de que os drivers do Hyper-V estejam incluídos no initramfs:
Edite
/etc/dracut.conf
e adicione o conteúdo:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Recompile o initramfs:
sudo dracut -f -v
Instale o agente Linux do Azure e as dependências para Extensões de VM do Azure:
sudo yum install python-pyasn1 WALinuxAgent sudo systemctl enable waagent
Instalar cloud-init para lidar com o provisionamento
sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
- Configurar o waagent para o cloud-init:
sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=auto/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
sudo 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
sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS" sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF if [[ -f /mnt/swapfile ]]; then echo Removing swapfile - RHEL uses a swapfile by default swapoff /mnt/swapfile rm /mnt/swapfile -f fi echo "Add console log file" cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF # 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
Configuração de troca
Não crie o espaço de troca no disco do sistema operacional.
Antes, o agente de 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. No entanto, isso agora é tratado por cloud-init; você não deve usar o agente do Linux para formatar o disco de recursos criar o arquivo de troca, modificar os seguintes parâmetros em
/etc/waagent.conf
de forma adequada: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
Se quiser montar, formatar e criar uma troca, você pode:
Passar isso como uma configuração de cloud-init toda vez que criar uma VM
Usar uma diretiva cloud-init inclusa na imagem que fará isso toda vez que a VM for criada:
sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF #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
Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:
Observação
Se você estiver migrando uma máquina virtual específica e não desejar criar uma imagem generalizada, ignore a etapa de desprovisionamento.
sudo rm -f /var/log/waagent.log sudo cloud-init clean sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0
Clique em Ação –> Desligar no Gerenciador do Hyper-V. Agora, seu VHD Linux está pronto para ser carregado no Azure.
Próximas etapas
Agora, você está pronto para usar o disco rígido virtual CentOS 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.