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 ciclo di vita). Prendere in considerazione l'uso e il piano di conseguenza. Per altre informazioni, vedere le linee guida per la fine della vita di CentOS.
Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili
Come creare e caricare un disco rigido virtuale Azure (VHD) che contiene un sistema operativo Linux basato su CentOS.
- Preparare una macchina virtuale CentOS 6.x per Azure
- Preparare una macchina virtuale CentOS 7.0+ per Azure
Prerequisiti
Questo articolo presuppone che sia già stato installato un sistema operativo Linux CentOS (o derivato simile) in un disco rigido virtuale. Sono disponibili vari strumenti per creare file con estensione vhd, ad 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, ma solo un disco rigido virtuale fisso. È possibile convertire il disco in formato VHD tramite la console di gestione di Hyper-V o il cmdlet convert-vhd . Se si usa VirtualBox, questo significa selezionare Dimensioni fisse anziché l'impostazione predefinita allocata dinamicamente durante la creazione del disco.
- Il modulo kernel vfat deve essere abilitato nel kernel
- Quando si installa il sistema Linux, è consigliabile usare partizioni standard anziché LVM (spesso l'impostazione predefinita per molte installazioni). In questo modo si evitano conflitti di nome LVM con macchine virtuali clonate, in particolare se un disco del sistema operativo deve essere collegato a un'altra macchina virtuale identica per la risoluzione dei problemi. È possibile usare LVM o RAID 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. L'agente Linux di Azure o cloud-init deve montare il file system UDF per leggerne la configurazione ed effettuare il provisioning della macchina virtuale.
- Le versioni del kernel Linux precedenti alla 2.6.37 non supportano NUMA in Hyper-V con dimensioni di vm maggiori. Questo problema influisce principalmente sulle distribuzioni precedenti usando il kernel upstream Centos 2.6.32 ed è stato risolto in Centos 6.6 (kernel-2.6.32-504). I sistemi che eseguono kernel personalizzati precedenti a 2.6.37 o kernel basati su RHEL precedenti a 2.6.32-504 devono impostare il parametro
numa=off
di avvio 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 esegue la conversione da un disco non elaborato a un disco rigido virtuale, è necessario assicurarsi che le dimensioni del disco non elaborato siano multiple di 1 MB prima della conversione. Per altre informazioni, vedere Note sull'installazione di Linux.
Nota
Cloud-init >= 21.2 rimuove il requisito della funzione definita dall'utente. Tuttavia, senza il modulo UDF abilitato, il cdrom non verrà montato durante il provisioning, impedendo l'applicazione di dati personalizzati. Una soluzione alternativa consiste nell'applicare dati personalizzati usando i dati utente. Tuttavia, a differenza dei dati personalizzati, i dati utente non vengono crittografati. https://cloudinit.readthedocs.io/en/latest/topics/format.html
CentOS 6.x
Importante
Si noti che CentOS 6 ha raggiunto la fine della vita (EOL) e non è più supportato dalla community CentOS. Ciò significa che non verranno rilasciati altri aggiornamenti o patch di sicurezza per questa versione, lasciandolo 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 macchina virtuale.
Fare clic su Connetti per aprire una finestra della console per la macchina virtuale.
In CentOS 6, NetworkManager può interferire con l'agente Linux di Azure. Disinstallare il pacchetto eseguendo questo comando:
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 l'interfaccia Ethernet. Le regole seguenti possono provocare problemi quando si clona una macchina virtuale in Microsoft 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
Verificare che il servizio di rete venga avviato in fase di avvio eseguendo il comando seguente:
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. Verrà aggiunto anche il repository [openlogic] che include pacchetti aggiuntivi, ad esempio 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 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
Nota
Il resto di questa guida presuppone che si stia usando almeno il
[openlogic]
repository, che verrà usato per installare l'agente Linux di Azure seguente.Aggiungere la seguente riga a /etc/yum.conf:
http_caching=packages
Eseguire questo comando per cancellare i metadati yum correnti e aggiornare il sistema con i pacchetti più recenti:
sudo yum clean all
A meno che non si stia creando un'immagine per una versione precedente di CentOS, è consigliabile aggiornare tutti i pacchetti alla versione più recente:
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 le versioni precedenti e facoltativo per le versioni successive.
sudo rpm -e hypervkvpd ## (may return 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 e NetworkManager-gnome se non sono già stati rimossi come descritto nel passaggio 3.
Modificare la riga di avvio del kernel nella configurazione GRUB per includere ulteriori parametri del kernel per Azure. A questo scopo, 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
In questo modo si garantisce inoltre che tutti i messaggi della console vengano inviati alla prima porta seriale, agevolando così il supporto di Azure nella risoluzione dei problemi di debug.
Oltre a quanto sopra, è consigliabile rimuovere i parametri seguenti:
rhgb quiet crashkernel=auto
Grafico e
quiet boot
non sono utili in un ambiente cloud in cui si vogliono inviare tutti i log alla porta seriale. L'opzionecrashkernel
può essere lasciata configurata se necessario, ma si noti che questo parametro ridurrà la quantità di memoria disponibile nella macchina virtuale di 128 MB o più, che potrebbe essere problematica nelle dimensioni di vm più piccole.Importante
Per CentOS 6.5 e le versioni precedenti deve essere impostato anche il parametro del kernel
numa=off
. Vedere l'articolo KB 436883 di Red Hat.Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio. Questo è in genere il valore predefinito.
Non creare l'area di swap sul disco del sistema operativo.
L'agente Linux di Azure può configurare automaticamente l'area di swap utilizzando il disco risorse locale collegato alla VM dopo il provisioning in Azure. Il disco della risorsa locale è un disco temporaneo e potrebbe essere svuotato quando viene eseguito il deprovisioning della macchina virtuale. Dopo aver installato l'agente Linux di Azure come illustrato nel passaggio precedente, modificare i seguenti parametri di
/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.
Eseguire i comandi seguenti per effettuare il deprovisioning della macchina virtuale 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.
- Fare clic su Azione> Arresta nella console di gestione di Hyper-V. Il disco rigido virtuale Linux è ora pronto per essere caricato in Azure.
CentOS 7.0+
Modifiche in CentOS 7 (e sistemi derivati simili)
La preparazione di una macchina virtuale CentOS 7 per Azure è simile a CentOS 6, ma esistono diverse differenze significative che vale la pena notare:
Il pacchetto NetworkManager e l'agente Linux di Azure non sono più in conflitto. Questo pacchetto viene installato per impostazione predefinita e si consiglia di non rimuoverlo.
GRUB2 viene ora usato come bootloader predefinito, quindi la procedura per la modifica dei parametri kernel è cambiata (vedere di seguito).
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
network.service
più per impostazione predefinita, è necessario installarlo manualmente:sudo yum install network-scripts sudo systemctl enable network.service
Procedura di configurazione
Nella console di gestione di Hyper-V selezionare la macchina virtuale.
Fare clic su Connetti per aprire una finestra della console per la macchina virtuale.
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 l'interfaccia Ethernet. Le regole seguenti possono provocare problemi quando si clona una macchina virtuale in Microsoft 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. Verrà aggiunto 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 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
Nota
Il resto di questa guida presuppone che si stia usando almeno il
[openlogic]
repository, che verrà usato per installare l'agente Linux di Azure seguente.Eseguire il comando seguente per cancellare i metadati yum correnti e installare eventuali aggiornamenti:
sudo yum clean all
A meno che non si stia creando un'immagine per una versione precedente di CentOS, è consigliabile aggiornare tutti i pacchetti alla versione più recente:
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 ulteriori parametri del kernel per Azure. A tale scopo, 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"
In questo modo si garantisce inoltre che tutti i messaggi della console vengano inviati alla prima porta seriale, agevolando così il supporto di Azure nella risoluzione dei problemi di debug. Disattiva anche nuove convenzioni di denominazione CentOS 7 per NIC. Oltre a quanto sopra, è consigliabile rimuovere i parametri seguenti:
rhgb quiet crashkernel=auto
L'avvio grafico e non silenzioso non è utile in un ambiente cloud in cui si vogliono inviare tutti i log alla porta seriale. L'opzione
crashkernel
può essere lasciata configurata se necessario, ma si noti che questo parametro ridurrà la quantità di memoria disponibile nella macchina virtuale di 128 MB o più, che potrebbe essere problematica nelle dimensioni di vm più piccole.Dopo aver completato la modifica
/etc/default/grub
per quanto sopra, eseguire il comando seguente per ricompilare la configurazione grub:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Nota
Se si carica 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 avrà esito negativo.
Assicurarsi che il modulo 'udf' sia abilitato. La rimozione/disabilitazione causerà un errore di provisioning/avvio. (_Cloud-init >= 21.2 rimuove il requisito della funzione definita dall'utente. Leggere la parte superiore del documento per altri dettagli.
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 macchine virtuali 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 per 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
Configurazione di scambio
Non creare spazio di scambio sul disco del sistema operativo.
In precedenza, l'agente Linux di Azure veniva usato per configurare automaticamente lo spazio di scambio usando il disco delle risorse locale collegato alla macchina virtuale dopo il provisioning della macchina virtuale in Azure. Tuttavia, questa operazione viene gestita da cloud-init, non è necessario usare l'agente Linux per formattare il disco delle risorse per creare il file di scambio, modificare i parametri seguenti in
/etc/waagent.conf
modo appropriato: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 desidera montare, formattare e creare lo scambio, è possibile:
Passare questa opzione come configurazione cloud-init ogni volta che si crea una macchina virtuale
Usare una direttiva cloud-init inserita nell'immagine che eseguirà questa operazione ogni volta che viene creata la macchina virtuale:
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 macchina virtuale 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
Fare clic su Azione> Arresta nella console di gestione di Hyper-V. Il disco rigido virtuale Linux è ora pronto per essere caricato in Azure.
Passaggi successivi
È ora possibile usare il disco rigido virtuale CentOS Linux per creare nuove macchine virtuali in Azure. Se è la prima volta che si carica il file VHD in Azure, vedere Creare una macchina virtuale Linux da un disco personalizzato.