Prepare a CentOS-based virtual machine for Azure (Preparar uma máquina virtual baseada em CentOS para o Azure)
Atenção
Este artigo faz referência ao CentOS, uma distribuição Linux que está perto do status de fim de vida útil (EOL). Considere a sua utilização e planeie em conformidade. Para obter mais informações, consulte as diretrizes de fim de vida útil do CentOS.
Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível
Aprenda a criar e carregar um disco rígido virtual (VHD) do Azure que contém um sistema operacional Linux baseado em CentOS. Para obter mais informações, consulte:
- Preparar uma máquina virtual (VM) do CentOS 6.x para o Azure
- Preparar uma VM do CentOS 7.0+ para o Azure
Pré-requisitos
Este artigo pressupõe que você já tenha instalado um sistema operacional Linux CentOS (ou derivado semelhante) em um VHD. Existem várias ferramentas para criar ficheiros .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, consulte Notas gerais de instalação do Linux.
- O formato VHDX não é suportado no Azure, apenas VHD fixo. Você pode converter o disco para o formato VHD usando o Gerenciador do Hyper-V ou o
convert-vhd
cmdlet. Se você estiver usando o VirtualBox, selecione Tamanho fixo em vez do padrão alocado dinamicamente quando você cria o disco. - O módulo do kernel vfat deve ser ativado no kernel.
- Quando você instala o sistema Linux, recomendamos que você use partições padrão em vez de Logical Volume Manager (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 conectado a outra VM idêntica para solução de problemas. LVM ou RAID também podem ser usados em discos de dados.
- É necessário suporte kernel para a montagem de sistemas de ficheiros de funções definidas pelo utilizador (UDF). Na primeira inicialização no Azure, a configuração de provisionamento é passada para a VM do Linux usando mídia formatada em UDF anexada ao convidado. O agente Linux do Azure ou
cloud-init
deve montar o sistema de arquivos UDF para ler sua configuração e provisionar a VM. - As versões do kernel Linux abaixo da versão 2.6.37 não suportam NUMA no Hyper-V com tamanhos de VM maiores. Esse problema afeta principalmente distribuições mais antigas usando o kernel upstream do Centos 2.6.32 e foi corrigido no Centos 6.6 (kernel-2.6.32-504). Os sistemas que executam kernels personalizados mais antigos que 2.6.37 ou kernels baseados no Red Hat Enterprise Linux (RHEL) mais antigos que 2.6.32-504 devem definir o parâmetro
numa=off
de inicialização na linha de comando do kernel em grub.conf. Para obter mais informações, consulte Red Hat KB 436883. - Não configure uma partição swap no disco do SO.
- Todos os VHDs no Azure devem ter um tamanho virtual alinhado a 1 MB. Ao converter de um disco bruto para VHD, você deve garantir que o tamanho do disco bruto seja um múltiplo de 1 MB antes da conversão. Para obter mais informações, consulte Notas de instalação do Linux.
Nota
Cloud-init >= 21.2 remove o requisito UDF. Mas sem o módulo UDF ativado, o CD-ROM não será montado durante o provisionamento, o que impede que dados personalizados sejam aplicados. Uma solução alternativa para essa situação é aplicar dados personalizados usando dados do usuário. 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.
CentOS 6.x
Importante
O CentOS 6 atingiu sua EOL e não é mais suportado pela comunidade CentOS. Não serão lançadas mais atualizações ou patches de segurança para esta versão, deixando-a vulnerável a potenciais 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 de 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 seguinte texto:NETWORKING=yes HOSTNAME=localhost.localdomain
Crie ou edite o arquivo
/etc/sysconfig/network-scripts/ifcfg-eth0
e adicione o seguinte texto:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
Modifique as regras do udev para evitar a geração de regras estáticas para as interfaces Ethernet. Essas regras podem causar problemas quando você clona uma VM 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
Certifique-se de que o serviço de rede inicia no momento da inicialização:
sudo chkconfig network on
Se você quiser usar os espelhos OpenLogic hospedados nos datacenters do Azure, substitua o
/etc/yum.repos.d/CentOS-Base.repo
arquivo pelos seguintes repositórios. Esta ação também adiciona o repositório [openlogic] que inclui pacotes extras, 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
Nota
O restante deste artigo pressupõe que você esteja usando pelo menos o
[openlogic]
repo, que é usado para instalar o agente Linux do Azure.Adicione a seguinte linha a
/etc/yum.conf
:http_caching=packages
Limpe os metadados atuais do yum e atualize 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 que você atualize todos os pacotes para o mais recente:
sudo yum -y update
Uma reinicialização pode ser necessária depois de executar este comando.
Opcional: instale os drivers para o Linux Integration Services (LIS).
Importante
A etapa é necessária para o CentOS 6.3 e versões 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 na página de download do LIS para instalar o RPM em sua VM.
Instale o agente Linux do Azure e as dependências. Inicie e habilite o
waagent
serviço:sudo yum install python-pyasn1 WALinuxAgent sudo service waagent start sudo chkconfig waagent on
O pacote WALinuxAgent remove os
NetworkManager
pacotes eNetworkManager-gnome
se eles ainda 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 outros parâmetros do kernel para o Azure. Para fazer 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 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.
Também recomendamos que você remova os seguintes parâmetros:
rhgb quiet crashkernel=auto
A inicialização gráfica e silenciosa não é útil em um ambiente de nuvem onde você deseja que todos os logs sejam enviados para a porta serial. A
crashkernel
opção pode ser deixada configurada, se 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 menores de VM.Importante
O CentOS 6.5 e versões anteriores também devem definir o parâmetro
numa=off
kernel. Para obter mais informações, consulte Red Hat KB 436883.Certifique-se de que o servidor Secure Shell está instalado e configurado para iniciar no momento da inicialização. Essa configuração geralmente é o padrã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 depois que a VM é provisionada 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 os seguintes parâmetros adequadamente
/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
Nota
Se você estiver migrando uma VM específica e não quiser criar uma imagem generalizada, ignore a etapa de desprovisionamento.
Selecione Ação>Desligar no Gerenciador do Hyper-V. Seu VHD do Linux agora está pronto para ser carregado no Azure.
CentOS 7.0+
Siga as etapas nas próximas seções se estiver usando o CentOS 7.0+.
Alterações no CentOS 7 (e derivados semelhantes)
A preparação de uma VM do CentOS 7 para o Azure é semelhante ao CentOS 6. Várias diferenças significativas são dignas de nota:
O
NetworkManager
pacote não entra mais em conflito com o agente Linux do Azure. Este pacote é instalado por padrão e recomendamos que você não o remova.GRUB2 agora é usado como o carregador de inicialização padrão, então o procedimento para editar os parâmetros do kernel mudou. (Consulte a seção "Etapas de configuração").
XFS é agora o sistema de arquivos padrão. O sistema de arquivos ext4 ainda pode ser usado, se desejar.
Como o CentOS 8 Stream e versões mais recentes não incluem
network.service
mais por padrão, você precisa instalá-lo manualmente:sudo yum install network-scripts sudo systemctl enable network.service
Passos de configuração
No Gerenciador do Hyper-V, selecione a VM.
Selecione Conectar para abrir uma janela de console para a VM.
Crie ou edite o arquivo
/etc/sysconfig/network
e adicione o seguinte texto:NETWORKING=yes HOSTNAME=localhost.localdomain
Crie ou edite o arquivo
/etc/sysconfig/network-scripts/ifcfg-eth0
e adicione o seguinte texto:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no NM_CONTROLLED=no
Modifique as regras do udev para evitar a geração de regras estáticas para as interfaces Ethernet. Essas regras podem causar problemas quando você clona uma VM 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
OpenLogic
espelhos hospedados nos datacenters do Azure, substitua o arquivo /etc/yum.repos.d/CentOS-Base.repo pelos repositórios a seguir. Esta ação também 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
Nota
O restante deste artigo pressupõe que você esteja usando pelo menos o
[openlogic]
repo, que é usado para instalar o agente Linux do Azure.Limpe os metadados atuais do yum 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 que você atualize todos os pacotes para o mais recente:
sudo yum -y update
Uma reinicialização pode ser necessária depois de executar este comando.
Modifique a linha de inicialização do kernel em sua configuração de grub para incluir outros parâmetros do kernel para o Azure. Para fazer essa etapa, abra
/etc/default/grub
em um editor de texto e edite oGRUB_CMDLINE_LINUX
parâmetro. Por exemplo:GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
Essa modificação também 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. Ele também desativa as 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
A inicialização gráfica e silenciosa não é útil em um ambiente de nuvem onde você deseja que todos os logs sejam enviados para a porta serial. A
crashkernel
opção pode ser deixada configurada, se 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 menores de VM.Depois de terminar de editar
/etc/default/grub
, reconstrua a configuração do grub:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Nota
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 do kernel vfat deve ser ativado no kernel. Caso contrário, o provisionamento falhará.Certifique-se de que o módulo udf está ativado. Removê-lo ou desativá-lo 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 criando a imagem a partir do VMware, VirtualBox ou KVM, verifique se os drivers Hyper-V estão incluídos no initramfs:
Editar
/etc/dracut.conf
e adicionar conteúdo:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Reconstrua os 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 swap:
Não crie espaço de permuta no disco do SO.
Anteriormente, o agente Linux do Azure era usado para configurar automaticamente o espaço de permuta usando o disco de recurso local anexado à VM depois que a VM é provisionada no Azure. No entanto,
cloud-init
agora lida com esta etapa. Você não deve usar o agente Linux para formatar o disco de recursos para criar o arquivo de permuta. Modifique os seguintes parâmetros de/etc/waagent.conf
forma apropriada: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 você quiser montar, formatar e criar o arquivo de permuta, você pode:
Passe este comando como uma
cloud-init
configuração sempre que criar uma VM.Use uma
cloud-init
diretiva incorporada na imagem para executar esta 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.
Nota
Se você estiver migrando uma VM específica e não quiser 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. Seu VHD do Linux agora está pronto para ser carregado no Azure.
Conteúdos relacionados
Agora você está pronto para usar seu VHD Linux do CentOS para criar novas VMs 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.