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 de fim de 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 SO (sistema operacional) Linux baseado em CentOS. Para saber mais, veja:
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. Um 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 VM.
Notas de instalação do CentOS
- Para obter mais dicas sobre como preparar o Linux para o Azure, veja Notas gerais de instalação 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ê está usando o VirtualBox, selecione Tamanho fixo em vez da opção padrão alocada dinamicamente quando você cria o disco. - O módulo de kernel vfat precisa ser habilitado no kernel.
- Ao instalar o sistema Linux, recomendamos utilizar partições-padrão em vez do gerenciador de volume lógico (LVM), que geralmente é o padrão para muitas instalações. O uso de partições evita 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 também podem ser usados em discos de dados.
- É necessário o suporte do kernel à montagem de sistemas de arquivos com UDFs (funções definidas pelo usuá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
cloud-init
precisa 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 a 2.6.37 ou com base em RHEL (Red Hat Enterprise Linux) anteriores a 2.6.32-504 devem 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. Para obter mais informações, consulte Notas de Instalação do Linux.
Observação
Cloud-init >= 21.2 remove o requisito UDF. Porém, 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 para essa situação é 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. Para obter mais informações, confira a seção Formatos de dados de usuário.
CentOS 6.x
Importante
O CentOS 6 atingiu o Fim da EOL e não tem mais suporte da comunidade CentOS. 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 que você atualize para uma versão mais recente do CentOS para garantir a segurança e a estabilidade do seu sistema. Para obter mais assistência, consulte o departamento de TI ou o administrador do sistema.
No Gerenciador do Hyper-V, selecione a VM.
Selecione Conectar para abrir uma janela do console para a VM.
No CentOS 6,
NetworkManager
pode interferir com o agente Linux do Azure. Desinstale este pacote: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 causar problemas ao clonar uma máquina virtual no 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
Verifique se o serviço de rede é iniciado na hora de inicialização:
sudo chkconfig network on
Se você 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 também adiciona 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 might 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 artigo pressupõe que você esteja usando pelo menos o repositório
[openlogic]
, que é usado para instalar o agente Linux do Azure.Adicione a seguinte linha ao
/etc/yum.conf
:http_caching=packages
Limpe 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
Uma reinicialização poderá ser necessária depois que você 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 é opcional para versões posteriores.
sudo rpm -e hypervkvpd ## (might return an 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
O pacote WALinuxAgent remove os pacotes
NetworkManager
eNetworkManager-gnome
se eles ainda não foram removidos, conforme descrito na etapa 3.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 realizar esta etapa, 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
Essa modificação também garantirá 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.
Também recomendamos que você remova 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 você deseja que todos os logs sejam enviados para a porta serial. A opção
crashkernel
poderá ser deixada configurada se você desejar. Mas esse parâmetro reduz a quantidade de memória disponível na VM em 128 MB ou mais, o que pode ser um problema para tamanhos de VM menores.Importante
CentOS 6.5 e anteriores também devem definir o parâmetro de kernel
numa=off
. Para obter mais informações, consulte o KB 436883 do Red Hat.Certifique-se de que o servidor Secure Shell está instalado e configurado para iniciar no tempo de inicialização. Essa configuração geralmente é 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 troca usando o disco de recurso local que é anexado à VM após o provisionamento da mesma 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 (consulte 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.
Desprovisione a VM e prepare-a para provisionamento no Azure:
sudo waagent -force -deprovision+user sudo export HISTSIZE=0
Observação
Se você está migrando uma máquina virtual específica e não quer criar uma imagem generalizada, ignore a etapa de desprovisionamento.
Selecione Ação>Desligar no Gerenciador do Hyper-V. Agora, seu VHD Linux está pronto para ser carregado no Azure.
CentOS 7.0+
Siga as etapas nas próximas seções se você estiver usando o CentOS 7.0+.
Alterações no CentOS 7 (e em derivativos similares)
Preparar uma VM centOS 7 para o Azure é semelhante ao CentOS 6. Vale a pena observar várias diferenças significativas:
O pacote
NetworkManager
não entra mais em conflito com o agente Linux do Azure. Esse pacote é instalado por padrão e recomendamos que você não o remova.O GRUB2 agora é usado como carregador de inicialização padrão. Com isso, o procedimento de edição de parâmetros do kernel mudou. (Consulte a seção "Etapas de configuração".)
O XFS agora é o sistema de arquivos padrão. O sistema de arquivos ext4 ainda poderá ser usado, se você desejar.
Como o CentOS 8 Stream e versões mais recentes não incluem mais o
network.service
por padrão, você precisa instalá-lo manualmente:sudo yum install network-scripts sudo systemctl enable network.service
Etapas de configuração
No Gerenciador do Hyper-V, selecione a VM.
Selecione Conectar para abrir uma janela do console para a VM.
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 causar problemas ao clonar uma máquina virtual no Azure ou no Hyper-V:
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
Se você quiser usar os espelhos
OpenLogic
hospedados nos 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 might 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 artigo pressupõe que você esteja usando pelo menos o repositório
[openlogic]
, que é usado para instalar o agente Linux do Azure.Desmarque os metadados yum atuais e instale todas as 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
Uma reinicialização poderá ser necessária depois que você executar esse comando.
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 realizar essa etapa, 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"
Essa modificação também garantirá 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. Ela também desativa novas convenções de nomenclatura do CentOS 7 para placas de interface de rede. Também recomendamos que você remova 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 você deseja que todos os logs sejam enviados para a porta serial. A opção
crashkernel
poderá ser deixada configurada se você desejar. Mas esse parâmetro reduz a quantidade de memória disponível na VM em 128 MB ou mais, o que pode ser um problema para tamanhos de VM menores.Após concluir a edição de
/etc/default/grub
, recompile a configuração do grub:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Observação
Se você 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 vfat precisa ser habilitado no kernel. Caso contrário, o provisionamento falhará.Verifique se o módulo udf está habilitado. Remover ou desabilitar causará uma falha de provisionamento ou inicialização. (_Cloud-init >= 21,2 remove o requisito udf. Para obter mais informações, leia a parte superior do documento.)
Se você 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
Instale
cloud-init
para lidar com o provisionamento:sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
- Configure
waagent
paracloud-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
- Configure
Configuração de troca:
Não crie espaço de troca no disco do sistema operacional.
Anteriormente, o Agente Linux do Azure era usado para configurar automaticamente o espaço de troca usando o disco de recurso local que é anexado à VM após o provisionamento da mesma no Azure. No entanto,
cloud-init
agora lida com essa etapa. Você não pode usar o agente do Linux para formatar o disco de recurso para criar o arquivo de troca. Modifique os seguintes parâmetros adequadamente no/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
Se deseja montar, formatar e criar o arquivo de troca, você pode:
Passar esse comando como uma configuração
cloud-init
sempre que você criar uma VM.Usar uma diretiva
cloud-init
inclusa na imagem para executar essa etapa sempre 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 VM e prepará-la para provisionamento no Azure.
Observação
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 cloud-init clean sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0
Selecione Ação>Desligar no Gerenciador do Hyper-V. Agora, o VHD do Linux está pronto para ser carregado no Azure.
Conteúdo relacionado
Agora você está pronto para usar o VHD do CentOS Linux para criar VMs 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.