Preparare una macchina virtuale basata su CentOS per Azure
Attenzione
Questo articolo fa riferimento a CentOS, una distribuzione Linux prossima allo stato EOL (End of Life, fine del servizio). Valutare le proprie esigenze e pianificare di conseguenza. Per altre informazioni, vedere le Linee guida per la fine del ciclo di vita di CentOS.
Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili
Questo articolo contiene informazioni su come creare e caricare un disco rigido virtuale (VHD) di Azure che contiene un sistema operativo Linux basato su CentOS. Per altre informazioni, vedi:
Prerequisiti
In questo articolo si presuppone che l'utente abbia già installato un sistema operativo Linux CentOS (o un sistema derivato simile) in un disco rigido virtuale. Sono disponibili vari strumenti per la creazione di file VHD. Un esempio è una soluzione di virtualizzazione come Hyper-V. Per istruzioni, vedere Installare il ruolo Hyper-V e configurare una macchina virtuale.
Note sull'installazione di CentOS
- Per altri suggerimenti sulla preparazione di Linux per Azure, vedere Note generali sull'installazione di Linux.
- Il formato VHDX non è supportato in Azure, solo nei VHD fissi. È possibile convertire il disco in formato VHD tramite la console di gestione di Hyper-V o il cmdlet
convert-vhd
. Se si usa VirtualBox, durante la creazione del disco selezionare Fixed size (A dimensione fissa) anziché l'opzione predefinita di allocazione dinamica. - Il modulo kernel vfat deve essere abilitato nel kernel.
- Quando si installa il sistema Linux è consigliabile usare partizioni standard anziché LVM (Logical Volume Manager), che è spesso l'impostazione predefinita per numerose installazioni. L'uso delle partizioni consente di evitare conflitti di nome LVM con le macchine virtuali clonate, in particolare se fosse necessario collegare un disco del sistema operativo a un'altra macchina virtuale identica per la risoluzione dei problemi. È possibile usare LVM o RAID anche su dischi di dati.
- Per il montaggio di file system UDF, è necessario il supporto del kernel. Al primo avvio in Azure la configurazione del provisioning viene passata alla macchina virtuale Linux tramite supporti di memorizzazione formattati con UDF, collegati al guest. È necessario che l'agente Linux di Azure o
cloud-init
possa montare il file system UDF per leggerne la configurazione ed effettuare il provisioning della macchina virtuale. - Le versioni di kernel Linux inferiori a 2.6.37 non supportano NUMA su Hyper-V con macchine virtuali di dimensioni maggiori. Questo problema incide principalmente sulle distribuzioni precedenti che usavano il kernel upstream Centos 2.6.32. Il problema è stato risolto in Centos 6.6 (kernel-2.6.32-504). I sistemi che eseguono kernel personalizzati con versione precedente a 2.6.37 o kernel basati su Red Hat Enterprise Linux (RHEL) con versione precedente a 2.6.32-504 devono impostare il parametro di avvio
numa=off
nella riga di comando del kernel in grub.conf. Per altre informazioni, vedere l'articolo KB 436883 di Red Hat. - Non configurare una partizione swap nel disco del sistema operativo.
- Le dimensioni di tutti i dischi rigidi virtuali in Azure devono essere allineate a 1 MB. Quando si converte un disco non formattato in un disco rigido virtuale, prima della conversione è necessario assicurarsi che le dimensioni del disco non formattato siano un multiplo di 1 MB. Per altre informazioni, vedere Note sull'installazione di Linux.
Nota
Cloud-init >= 21.2 rimuove il requisito di UDF. Senza il modulo UDF abilitato, tuttavia, il CD-ROM non verrà montato durante il provisioning, impedendo l'applicazione dei dati personalizzati. Una soluzione alternativa per questa situazione consiste nell'applicare i dati personalizzati usando i dati utente. A differenza dei dati personalizzati, i dati utente non sono crittografati. Per altre informazioni, vedere Formati dei dati utente.
CentOS 6.x
Importante
CentOS 6 ha raggiunto la fine del servizio e non è più supportato dalla community CentOS. Non verranno rilasciati altri aggiornamenti o patch di sicurezza per questa versione, lasciandola vulnerabile ai potenziali rischi per la sicurezza. È consigliabile eseguire l'aggiornamento a una versione più recente di CentOS per garantire la sicurezza e la stabilità del sistema. Per ulteriore assistenza, rivolgersi al reparto IT o all'amministratore di sistema.
Nella console di gestione di Hyper-V selezionare la VM.
Selezionare Connetti per aprire una finestra della console per la VM.
In CentOS 6,
NetworkManager
può interferire con l'agente Linux di Azure. Disinstallare questo pacchetto:sudo rpm -e --nodeps NetworkManager
Creare o modificare il file
/etc/sysconfig/network
e aggiungere il testo seguente:NETWORKING=yes HOSTNAME=localhost.localdomain
Creare o modificare il file
/etc/sysconfig/network-scripts/ifcfg-eth0
e aggiungere il testo seguente:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
Modificare le regole udev per evitare la generazione di regole statiche per le interfacce Ethernet. Le regole seguenti possono causare problemi quando si clona una macchina virtuale in Azure o 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
Assicurarsi che il servizio di rete venga avviato all'avvio:
sudo chkconfig network on
Se si vogliono usare i mirror OpenLogic ospitati nei data center di Azure, sostituire il file
/etc/yum.repos.d/CentOS-Base.repo
con i repository seguenti. Questa azione aggiunge anche il repository [openlogic], che include pacchetti aggiuntivi come l'agente Linux di 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
La parte restante di questo articolo a presuppone che l'utente usi almeno il repository
[openlogic]
, che viene usato per installare l'agente Linux di Azure.Aggiungere la riga seguente a
/etc/yum.conf
:http_caching=packages
Cancellare i metadati yum correnti e aggiornare il sistema con i pacchetti più recenti:
sudo yum clean all
A meno che non si crei un'immagine per una versione precedente di CentOS, è consigliabile aggiornare tutti i pacchetti all'ultima versione:
sudo yum -y update
Dopo l'esecuzione di questo comando potrebbe essere necessario un riavvio.
Facoltativo: installare i driver per Linux Integration Services (LIS).
Importante
Questo passaggio è obbligatorio per CentOS 6.3 e versioni precedenti e facoltativo per le versioni successive.
sudo rpm -e hypervkvpd ## (might return an error if not installed, that's OK) sudo yum install microsoft-hyper-v
In alternativa, seguire le istruzioni per l'installazione manuale disponibili nella pagina di download di LIS per installare RPM nella VM.
Installare l'agente Linux di Azure e le dipendenze. Avviare e abilitare il servizio
waagent
:sudo yum install python-pyasn1 WALinuxAgent sudo service waagent start sudo chkconfig waagent on
Il pacchetto WALinuxAgent rimuove i pacchetti
NetworkManager
eNetworkManager-gnome
se non sono già stati rimossi, come descritto nel passaggio 3.Modificare la riga di avvio del kernel nella configurazione GRUB per includere altri parametri del kernel per Azure. Per eseguire questo passaggio, aprire
/boot/grub/menu.lst
in un editor di testo e verificare che il kernel predefinito includa i parametri seguenti:console=ttyS0 earlyprintk=ttyS0 rootdelay=300
Questa modifica, inoltre, garantisce che tutti i messaggi della console vengano inviati alla prima porta seriale, agevolando così il supporto tecnico di Azure nella risoluzione dei problemi di debug.
È consigliabile anche rimuovere i parametri seguenti:
rhgb quiet crashkernel=auto
L'avvio grafico e l'avvio silenzioso non sono utili in un ambiente cloud se tutti i log devono essere inviati alla porta seriale. L'opzione
crashkernel
può essere lasciata configurata se si desidera. Questo parametro riduce però la quantità di memoria disponibile nella macchina virtuale di almeno 128 MB e questo potrebbe causare problemi in VM di dimensioni inferiori.Importante
Per CentOS 6.5 e le versioni precedenti deve essere impostato anche il parametro del kernel
numa=off
. Per altre informazioni, vedere l'articolo KB 436883 di Red Hat.Verificare che il server Secure Shell sia installato e configurato per l'esecuzione all'avvio. Questa è in genere l'impostazione predefinita.
Non creare l'area di swap sul disco del sistema operativo.
L'agente Linux di Azure può configurare automaticamente l'area di swapping usando il disco risorse locale collegato alla VM dopo il provisioning della VM in Azure. Il disco risorse locale è un disco temporaneo e potrebbe essere svuotato in seguito al deprovisioning della macchina virtuale. Dopo aver installato l'agente Linux di Azure come illustrato nel passaggio precedente, modificare i parametri seguenti in
/etc/waagent.conf
in modo appropriato: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.
Effettuare il deprovisioning della VM e prepararla per il provisioning in Azure:
sudo waagent -force -deprovision+user sudo export HISTSIZE=0
Nota
Se si esegue la migrazione di una macchina virtuale specifica e non si vuole creare un'immagine generalizzata, ignorare il passaggio di deprovisioning.
Selezionare Azione>Arresta nella Console di gestione di Hyper-V. Il disco rigido virtuale Linux è ora pronto per il caricamento in Azure.
CentOS 7.0+
Seguire i passaggi nelle sezioni successive se si usa CentOS 7.0 o versioni successive.
Modifiche in CentOS 7 (e sistemi derivati simili)
La preparazione di una macchina virtuale CentOS 7 per Azure è simile a quella di una VM CentOS 6. Alcune differenze sono degne di nota:
Il pacchetto
NetworkManager
e l'agente Linux di Azure non sono più in conflitto. Questo pacchetto viene installato per impostazione predefinita ed è consigliabile non rimuoverlo.GRUB2 viene ora usato come bootloader predefinito, quindi la procedura per la modifica dei parametri del kernel è cambiata. Vedere la sezione "Passaggi di configurazione".
XFS è ora il file system predefinito. Se si vuole, è ancora possibile usare il file system ext4.
Poiché CentOS 8 Stream e versioni successive non includono più
network.service
per impostazione predefinita, è necessario installarlo manualmente:sudo yum install network-scripts sudo systemctl enable network.service
Passaggi di configurazione
Nella console di gestione di Hyper-V selezionare la macchina virtuale.
Selezionare Connetti per aprire una finestra della console per la VM.
Creare o modificare il file
/etc/sysconfig/network
e aggiungere il testo seguente:NETWORKING=yes HOSTNAME=localhost.localdomain
Creare o modificare il file
/etc/sysconfig/network-scripts/ifcfg-eth0
e aggiungere il testo seguente:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no NM_CONTROLLED=no
Modificare le regole udev per evitare la generazione di regole statiche per le interfacce Ethernet. Le regole seguenti possono causare problemi quando si clona una macchina virtuale in Azure o Hyper-V:
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
Se si vogliono usare i mirror
OpenLogic
ospitati nei data center di Azure, sostituire il file /etc/yum.repos.d/CentOS-Base.repo con i repository seguenti. Questa azione aggiunge anche il repository [openlogic] che include i pacchetti per l'agente Linux di 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
La parte restante di questo articolo a presuppone che l'utente usi almeno il repository
[openlogic]
, che viene usato per installare l'agente Linux di Azure.Cancellare i metadati yum correnti e installare eventuali aggiornamenti:
sudo yum clean all
A meno che non si crei un'immagine per una versione precedente di CentOS, è consigliabile aggiornare tutti i pacchetti all'ultima versione:
sudo yum -y update
Dopo l'esecuzione di questo comando potrebbe essere necessario un riavvio.
Modificare la riga di avvio del kernel nella configurazione GRUB per includere altri parametri del kernel per Azure. Per eseguire il passaggio, aprire
/etc/default/grub
in un editor di testo e modificare il parametroGRUB_CMDLINE_LINUX
. Ad esempio:GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
Questa modifica, inoltre, garantisce che tutti i messaggi della console vengano inviati alla prima porta seriale, agevolando così il supporto tecnico di Azure nella risoluzione dei problemi di debug. Disattiva anche nuove convenzioni di denominazione CentOS 7 per le schede di interfaccia di rete. È consigliabile anche rimuovere i parametri seguenti:
rhgb quiet crashkernel=auto
L'avvio grafico e l'avvio silenzioso non sono utili in un ambiente cloud se tutti i log devono essere inviati alla porta seriale. L'opzione
crashkernel
può essere lasciata configurata se si desidera. Questo parametro riduce però la quantità di memoria disponibile nella macchina virtuale di almeno 128 MB e questo potrebbe causare problemi in VM di dimensioni inferiori.Dopo aver terminato di modificare
/etc/default/grub
, ricompilare la configurazione GRUB:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Nota
Se si sta caricando una macchina virtuale abilitata per UEFI, il comando per aggiornare GRUB è
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
. Inoltre, il modulo kernel vfat deve essere abilitato nel kernel. In caso contrario, il provisioning non riesce.Assicurarsi che il modulo UDF sia abilitato. La rimozione o la disabilitazione del modulo causeranno un errore di provisioning o avvio. (_Cloud-init >= 21.2 rimuove il requisito di UDF. Per altre informazioni, leggere la prima parte del documento.)
Se si compila l'immagine da VMware, VirtualBox o KVM, verificare che i driver Hyper-V siano inclusi in initramfs:
Modificare
/etc/dracut.conf
e aggiungere il contenuto:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Ricompilare l’initramfs:
sudo dracut -f -v
Installare l'agente Linux di Azure e le dipendenze per le estensioni di VM di Azure:
sudo yum install python-pyasn1 WALinuxAgent sudo systemctl enable waagent
Installare
cloud-init
per gestire il provisioning:sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
- Configurare
waagent
percloud-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
- Configurare
Configurazione dello swapping:
Non creare l'area di swap sul disco del sistema operativo.
In precedenza, l'agente Linux di Azure era usato per configurare automaticamente lo spazio di swapping usando il disco risorse locale collegato alla VM dopo il provisioning della VM in Azure. Tuttavia, ora è
cloud-init
a gestire questo passaggio. Non bisogna usare l'agente Linux per formattare il disco delle risorse per creare il file di scambio. Modificare appropriatamente i parametri seguenti in/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 si vuole montare, formattare e creare il file di scambio, è possibile:
Passare questo comando come configurazione
cloud-init
ogni volta che si crea una macchina virtuale.Usare una direttiva
cloud-init
integrata nell'immagine per eseguire questo passaggio ogni volta che viene creata la VM: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
Eseguire i comandi seguenti per effettuare il deprovisioning della VM e prepararla per il provisioning in Azure.
Nota
Se si esegue la migrazione di una macchina virtuale specifica e non si vuole creare un'immagine generalizzata, ignorare il passaggio di deprovisioning.
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
Selezionare Azione>Arresta nella Console di gestione di Hyper-V. Il file VHD Linux è ora pronto per il caricamento in Azure.
Contenuto correlato
È ora possibile usare il file del disco rigido virtuale CentOS Linux per creare nuove VM in Azure. Se è la prima volta che si carica il file VHD in Azure, vedere Creare una macchina virtuale Linux da un disco personalizzato.