Introduzione
Continuiamo, con questa terza parte, la realizzazione del cluster Linux automatizzando ulteriormente tutta la procedura dell’articolo precedente utilizzando Vagrant e come provision utilizzeremo ansible.
Per semplicità di esposizione consideriamo che Vagrant sia già installato nello stesso computer dov’è Virtualbox come pure per ansible (vedere l’Installation Guide per maggiori informazioni).
Linux cluster ansible su GitHub
Su GitHub ho pubblicato questo progetto con tutte le specifiche per il funzionamento:
Quindi apriamo un terminale e ci posizioniamo su una cartella di lavoro e scarichiamo il progetto con:
cd $HOME
mkdir linux-cluster-test-ansible
cd linux-cluster-test-ansible
git clone https://github.com/eniocarboni/linux-cluster-test-ansible .
Copiamo il file per le password da assegnare agli utenti linux:
- vagrant
- hacluster
- fencecluster
cp provision/vars/cluster_password.TMPL.yml provision/vars/cluster_password.yml
Il file va editato e modificate le password.
Vagrant è configurato (vedi il file Vagrantfile) per creare vm Ubuntu 20.04 ma editando il suo file d configurazione lo si può configurare anche per Centos 7 ed AlmaLinux.
Per creare le vm e configurare il cluster Linux tramite ansible utilizzare il comando:
vagrant up --provision
Aggiungere un nodo al cluster
Per aggiungere un nodo al cluster bisogna editare il file Vagrantfile e modificare la variabile $NUM_CLUSTER_NODES, ad esempio, passando dal default 3 a 4 nodi e quindi il comando:
vagrant up --provision
Eliminare un nodo dal cluster
Per eliminare un nodo basta il comando:
vagrant destroy cl-node-3
Editare poi il file Vagrantfile e diminuire di 1 il valore della variabile $NUM_CLUSTER_NODES e quindi:
vagrant up --provision
Cluster: Provision con ansible
Naturalmente è possibile utilizzare ansible senza utilizzare vagrant se le vm sono già state create dato che vagrant al primo provision crea il file di inventory per ansible in:
.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
Inoltre il file di playbook è:
provision/playbook.yml
Il comando completo per ansible per fare il provision è:
ansible-playbook --inventory-file=.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory provision/playbook.yml
In tal modo si può utilizzare ansible anche su un tags o per avere informazioni su tutte le vm.
Ad esempio per fare solo il provision della parte cluster (e non tutta la prima parte dell’installazione delle vm) si può utilizzare il tag controller mentre per la parte riferibile alle risorse fence si può utilizzare il tag fence.
Ad esempio:
ansible-playbook --inventory-file=.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --tags="fence" provision/playbook.yml
# o
ansible-playbook --inventory-file=.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --tags="controller" provision/playbook.yml
Protezione password
Se si vuole proteggere il file delle password degli utenti Linux provision/vars/cluster_password.yml si può creare un vault criptato di ansible tramite il comando:
ansible-vault encrypt provision/vars/cluster_password.yml
Verrà chiesta la password per la criptazione e quindi il file sarà criptato.
A questo punto per poter funzionare con vagrant bisogna eliminare il commento sul file Vagrantfile alla riga:
#ansible.ask_vault_pass = true
Si può fare editando il file o con il semplice comando:
sed -i 's/#ansible.ask_vault_pass/ansible.ask_vault_pas/' Vagrantfile
A questo punto ogni volta che vagrant esegue il provision, ansible richiederà di inserire la password del vault appena creato.
Conclusioni
Con questo terzo articolo si concludono tutti i test su un ambiente virtuale per gestire un cluster Linux di N nodi con Pacemaker, Corosync e pcs.
Siamo partiti con l’installazione manuale, quindi tramite vagrant per la gestione delle vm e poi con abbiamo utilizzato la shell bash come provisioner.
Infine in questo articolo abbiamo automatizzato ancora utilizzando ansible come provisioner semplificando e rendendo il progetto riutilizzabile in maniera più semplice.
Per ogni altro chiarimento o specifica vi rimando su linux-cluster-test-ansible.
Riferimenti
- Articolo precedente;
- Ansible;
- Ansible Installation Guide;
- Ansible Vault;
- Vagrant per installare, configurare e gestire macchine virtuali;
- Virtualbox per la virtualizzazione di vm;
- Pacemaker per la creazione di risorse ad alta disponibilità, open source per piccoli e grandi cluster;
- Corosync insieme a Pacemaker aiuta per la parte di alta disponibilità;
- Agent di fence fence_ssh per testare la rete di fence del cluster;
- comandi di cluster pcs;
- linux-cluster-test su Github;
- linux-cluster-test-ansible su Github;
- Ubuntu 20.04 e 18.04 LTS;
- Cento 7;
- AlmaLinux;
- RedHat;
- Ruby.