Esercizio - Creare uno script cloud-init da usare con Azure CycleCloud
Quando si effettua il provisioning dei nodi per un cluster, può essere necessario eseguire attività di configurazione personalizzate durante il processo di avvio del sistema operativo, prima che le modifiche guidate dall'utilità di pianificazione vengano applicate. Queste attività possono includere, ad esempio, l'aggiornamento delle variabili di ambiente del percorso, la configurazione delle impostazioni di risoluzione dei nomi DNS (Domain Name System) o l'associazione di nodi a un dominio di Microsoft Entra Domain Services (AD DS).
Per implementare questa funzionalità, si è deciso di esplorare l'uso di cloud-init nei cluster Azure CycleCloud e di testarlo con un semplice script Bash che modifica il contenuto di un file locale in ogni nodo. Si intende convalidare il risultato connettendosi ai nodi del cluster ed esaminando il contenuto dei file modificati.
Nota
Durante la creazione di script cloud-init, è possibile usare qualsiasi metodo di scripting o configurazione che il sistema operativo in esecuzione nei nodi di destinazione sia in grado di riconoscere ed elaborare, inclusi script di shell tradizionali, Python e YAML.
In questo esercizio si eseguiranno le seguenti attività:
- Attività 1: Configurare l'autenticazione basata su SSH per i nodi del cluster Azure CycleCloud
- Attività 2: Aggiungere uno script cloud-init ai nodi del cluster
- Attività 3: Verificare la funzionalità di cloud-init nel nodo dell'utilità di pianificazione
- Attività 4: Verificare la funzionalità di cloud-init nei nodi di calcolo
- Attività 5: Pulire l'ambiente di esercizio
Nota
Assicurarsi di aver completato l'esercizio precedente prima di iniziare questo esercizio.
Attività 1: Configurare l'autenticazione basata su SSH per i nodi del cluster Azure CycleCloud
Per convalidare l'esecuzione degli script cloud-init, ci si connetterà ai nodi del cluster con l'interfaccia della riga di comando di Azure CycleCloud da Azure Cloud Shell. Questa connessione si basa sull'autenticazione basata su chiavi SSH, quindi sarà necessario caricare nella home directory di Azure Cloud Shell la chiave privata corrispondente alla chiave pubblica distribuita nei nodi del cluster.
Passare al portale di Azure e, quando richiesto, eseguire l'autenticazione con un account Microsoft o un account Microsoft Entra con il ruolo Collaboratore o Proprietario nella sottoscrizione di Azure usata in questo modulo.
Dal portale di Azure aprire Cloud Shell selezionando la relativa icona sulla barra degli strumenti accanto alla casella di ricerca e assicurarsi di eseguire una sessione di Bash.
Nel riquadro Azure Cloud Shell, nella barra degli strumenti del riquadro selezionare la quarta icona che visualizza una pagina con una coppia di frecce verticali che puntano in direzioni opposte. Nel menu a discesa selezionare quindi Carica.
Nella finestra di dialogo Apri passare alla posizione del file con estensione pem contenente la chiave privata e selezionare Apri.
Eseguire i comandi seguenti in Cloud Shell per spostare il file con estensione .pem caricato nel percorso corretto e configurare le autorizzazioni a livello di file necessarie (sostituire il segnaposto
<private_key.pem>
con il nome del file con estensione .pem):mkdir -p ~/.ssh mv private_key.pem ~/.ssh chmod 600 ~/.ssh/cc-ssh-keys.pem
Attività 2: Aggiungere uno script cloud-init ai nodi del cluster
L'opzione per aggiungere script ai nodi del cluster è disponibile direttamente dall'interfaccia grafica di Azure CycleCloud. Tale opzione verrà usata per assegnare lo stesso script cloud-init all'utilità di pianificazione e ai nodi di calcolo e quindi verificarne la funzionalità. Lo script aggiunge una voce 10.10.10.10 cc.contoso.com al file /etc/hosts.
Se non è ancora stata stabilita la connessione all'applicazione Web Azure CycleCloud, aprire un'altra finestra del browser e passare all'URL https://<IP_address>. Se viene richiesto, confermare di voler continuare.
Se viene richiesto di eseguire l'autenticazione, accedere fornendo le credenziali dell’account utente dell'applicazione Azure CycleCloud con il ruolo di amministratore.
Nell'interfaccia grafica di Azure CycleCloud passare alla pagina Clusters (Cluster). Nell'elenco dei cluster selezionare la voce contoso-custom-slurm-lab-cluster e quindi Edit (Modifica).
Nella finestra popup Edit contoso-custom-slurm-lab-cluster (Modifica contoso-custom-slurm-lab-cluster) selezionare la voce Cloud-init e nella sezione Cloud-init configuration (Configurazione di cloud-init) immettere nella scheda scheduler lo script seguente:
#!/bin/bash echo "10.10.10.10 www.contoso.com" >> /etc/hosts
Nella stessa finestra popup con la voce Cloud-init selezionata, selezionare ognuna delle schede rimanenti (tra cui cuda, hpce htc) e immettere lo stesso script. Seleziona Salva.
Attività 3: Verificare la funzionalità di cloud-init nel nodo dell'utilità di pianificazione
Per verificare la funzionalità di cloud-init nel nodo dell'utilità di pianificazione, avviare il cluster. Verrà attivato il provisioning del nodo dell'utilità di pianificazione. Quando il nodo è in esecuzione, sarà possibile connettersi al nodo da Azure Cloud Shell e verificare che il file /etc/hosts contenga la voce 10.10.10.10 www.contoso.com.
Nella finestra del browser in cui è visualizzata l'applicazione Web Azure CycleCloud, nella pagina contoso-custom-slurm-lab-cluster selezionare il collegamento Start (Avvia). Quando viene richiesto di confermare, fare clic su OK.
Nota
Se il cluster è già in esecuzione, sarà necessario terminarlo e quindi avviarlo di nuovo per applicare la configurazione aggiornata, in caso contrario la configurazione non sarà visibile nei passaggi successivi.
Nell'elenco di nodi selezionare la voce Scheduler e monitorarne lo stato nel riquadro details (Dettagli) fino a quando non passa da Acquiring (Acquisizione) a Ready (Pronto).
Nota
Possono essere necessari circa tre minuti.
Nel riquadro Details (Dettagli) selezionare Connect (Connetti). Nella finestra popup Connect to node: scheduler (Connetti a nodo: scheduler), nella sezione Using the CycleCloud CLI (Con l'interfaccia della riga di comando di CycleCloud) selezionare la voce contenente il comando che consente la connessione al nodo dell'utilità di pianificazione e selezionare Close (Chiudi):
Nota
Il formato del comando deve essere
cyclecloud connect scheduler -c contoso-custom-slurm-lab-cluster
Passare alla finestra del Web browser con il riquadro Cloud Shell ed eseguire il comando copiato nel passaggio precedente.
Nota
Il comando genererà un output nel formato seguente:
m@Azure:~$ cyclecloud connect scheduler -c contoso-custom-slurm-lab-cluster Connecting to cc-admin@40.87.52.25 (contoso-custom-slurm-lab-cluster scheduler) using SSH [cc-admin@ip-0A000304 ~]$
Quando si è connessi al nodo dell'utilità di pianificazione, eseguire il comando seguente per verificare che il file /etc/hosts contenga la voce 10.10.10.10 www.contoso.com:
grep "10.10.10.10 www.contoso.com" /etc/hosts
Nota
Il comando genererà un output nel formato seguente:
[cc-admin@ip-0A000304 ~]$ grep "10.10.10.10 www.contoso.com" /etc/hosts 10.10.10.10 www.contoso.com
Attività 4: Verificare la funzionalità di cloud-init nei nodi di calcolo
Si ripeterà ora la sequenza equivalente di passaggi per verificare la funzionalità di cloud-init nei nodi di calcolo.
Importante
Prima di applicare la procedura equivalente per verificare la funzionalità di cloud-init nei nodi di calcolo, è necessario rimuovere e riallocare il set di scalabilità di macchine virtuali corrispondente. Questo passaggio è specifico per i cluster basati su Slurm perché, in questo caso, l'integrazione della scalabilità automatica dell'utilità di pianificazione richiede che Azure CycleCloud prepopoli i nodi di calcolo. Di conseguenza, la configurazione di cloud-init applicata in precedenza in questo esercizio non influirà sui nodi già esistenti.
Durante la connessione al nodo dell'utilità di pianificazione, eseguire i comandi seguenti in Cloud Shell per rimuovere e riallocare i nodi di calcolo nel cluster Azure CycleCloud e terminare la connessione al nodo dell'utilità di pianificazione:
sudo -i cd /opt/cycle/jetpack/system/bootstrap/slurm ./cyclecloud_slurm.sh remove_nodes ./cyclecloud_slurm.sh scale exit exit
Nota
Al termine di questo passaggio, verrà visualizzato il messaggio Attempting to remove the following nodes (È in corso un tentativo di rimozione dei nodi seguenti) seguito da re-scaling cluster complete (Ridimensionamento del cluster completato).
Nel computer passare alla finestra del Web browser in cui è visualizzata la pagina contoso-custom-slurm-lab-cluster dell'applicazione Web Azure CycleCloud. Nella scheda Nodes (Nodi) selezionare la riga htc e nel riquadro details (Dettagli) selezionare la voce htc-1, quindi selezionare l'intestazione della scheda Actions (Azioni). Nel menu a discesa selezionare Start (Avvia) e, quando viene richiesto di confermare, selezionare OK.
Nel riquadro details (Dettagli) monitorare il nodo appena avviato fino a quando lo stato non passa da Acquiring (Acquisizione) a Ready (Pronto).
Nota
Possono essere necessari circa tre minuti.
Nel riquadro Details (Dettagli) selezionare Connect (Connetti). Nella finestra popup Connect to node: htc-1 (Connetti a nodo: scheduler), nella sezione Using the CycleCloud CLI (Con l'interfaccia della riga di comando di CycleCloud) selezionare la voce contenente il comando che consente la connessione al nodo dell'utilità di pianificazione e selezionare Close (Chiudi):
Nota
Il formato del comando deve essere
cyclecloud connect htc-1 -c contoso-custom-slurm-lab-cluster
.Passare al riquadro Cloud Shell ed eseguire il comando copiato nel passaggio precedente.
Nota
Il comando genererà un output nel formato seguente:
m@Azure:~$ cyclecloud connect htc-1 -c contoso-custom-slurm-lab-cluster Connecting to cc-admin@10.0.3.5 (contoso-custom-slurm-lab-cluster htc-1) through SSH bastion at cc-admin@40.87.52.25 [cc-admin@ip-0A000305 ~]$
Quando si è connessi al nodo htc-1, eseguire il comando seguente per verificare che il file /etc/hosts contenga la voce 10.10.10.10 www.contoso.com:
cat /etc/hosts | grep "10.10.10.10 www.contoso.com"
Nota
Una volta raggiunto questo punto, è necessario eliminare tutte le risorse distribuite in questo esercizio e negli esercizi precedenti di questo modulo. Sarà così possibile evitare che vengano addebitati costi associati alla gestione di queste risorse nella sottoscrizione di Azure.
Attività 5: Eseguire la pulizia dell'ambiente lab
Il test della personalizzazione del cluster tramite l'applicazione Azure CycleCloud è stato completato. Per evitare costi non necessari associati all'uso delle risorse di Azure, ora si terminerà il cluster e si rimuoveranno tutte le risorse di cui è stato effettuato il provisioning durante gli esercizi di questo modulo.
Nel Web browser in cui è visualizzata l'interfaccia grafica dell'applicazione Web Azure CycleCloud, nella pagina contoso-custom-slurm-lab-cluster selezionare il collegamento Terminate (Termina) e, quando viene chiesta conferma, selezionare OK.
Monitorare il processo di terminazione.
Nota
Il processo prevede il deprovisioning della macchina virtuale di Azure che svolge il ruolo del nodo head del cluster. Possono essere necessari circa cinque minuti.
Nota
Per eliminare tutte le altre risorse di cui è stato effettuato il provisioning in questo lab, eliminare i gruppi di risorse che ospitano le risorse del cluster.
Nel portale di Azure passare al pannello del gruppo di risorse che ospita le risorse del cluster e selezionare la voce Elimina gruppo di risorse sulla barra degli strumenti. Nella casella di testo Immettere il nome del gruppo di risorse per confermare l'eliminazione immettere il nome del gruppo di risorse e selezionare Elimina. Selezionare di nuovo Elimina per confermare l'eliminazione.
Nota
Possono essere presenti altri gruppi di risorse associati alle risorse di Slurm. Per evitare costi aggiuntivi, assicurarsi di eliminare tutti i gruppi di risorse correlati a Slurm e le relative risorse.
Congratulazioni. Il terzo e ultimo esercizio di questo modulo è stato completato. In questo esercizio è stato illustrato l'uso di cloud-init nei cluster Azure CycleCloud e ne è stato eseguito il test con un semplice script Bash che ha modificato il contenuto di un file locale in ogni nodo. Il risultato è stato convalidato connettendosi ai nodi del cluster ed esaminando il contenuto dei file modificati. Il cluster è stato quindi terminato e sono state eliminate tutte le risorse del cluster usate in questo modulo per evitare costi non necessari.