Il repository contiene gli script di installazione e configurazione di tutte le componenti infrastrutturali e del software di base della piattaforma Web Analitycs Italia.
Di seguito l'infrastruttura applicativa e la dislocazione delle componenti.
Installare le dipendenze con:
$ pip install -r requirements.txt
Per l'installazione è necessario utilizzare un host locale o remoto come controller; su questa macchina è necessario creare la chiave RSA per l'accesso tramite ssh utilizzando il comando:
$ ssh-keygen -t rsa -b 4096 -N '' -f ssh_wai_key
Il comando creerà una copia di chiavi (pubblica e privata) che saranno utilizzate per l'accesso agli host dell'infrastruttura.
Per il provisioning dell'infrastruttura presso il servizio SPC Cloud - Lotto 1,
è disponibile lo script infrastructure/wai-provisioner.py
che automatizza la
procedura di creazione di tutte le risorse previste (reti, gruppi di protezione,
istanze, volumi, etc.).
Prima di utilizzare lo script è necessario creare i file che descrivono gli
ambienti utilizzado i template disponibili
(infrastructure/env-*.tfvars.template
) e copiandoli/rinominandoli senza
l'estensione .template
.
Nel file env-common.tfvars
va inserita la chiave pubblica generata
precedentemente.
Le credenziali per l'accesso al cloud provider devono essere caricate come variabili d'ambiente. Il modo più semplice è utilizzare il file OpenStack RC.
Se non si desidera utilizzare lo script è possibile usare direttamente
Terraform avendo cura di creare tre distinti
workspace per ciascuno degli ambienti previsti: production
, staging
e
public-playground
.
Per la creazione/aggiornamento delle risorse nell'infrastruttura:
$ infrastructure/wai-provisioner.py <environment> apply
Per la distruzione delle risorse nell'infrastruttura (senza possibilità di recupero):
$ infrastructure/wai-provisioner.py <environment> destroy
Il parametro <environment>
può assumere uno dei tre valori: production
,
staging
o public-playground
.
Per l'installazione e configurazione del software di base e delle componenti
infrastrutturali è stato realizzato il playbook
Ansible wai.yml
; il playbook è realizzato per la
versione del sistema operativo Ubuntu Server 18.04 LTS.
Lo script playbooks/inventory/10-openstack_inventory.py
è utilizzato da
Ansible per la generazione di un inventory dinamico a partire dalle risorse
create. Accanto a questo è presente anche un inventory statico
(playbooks/inventory/20-k8s-static-inventory
) necessario per l'installazione
del cluster Kubernetes.
Anche questo script necessita che le credenziali per l'accesso al cloud provider siano caricate come variabili d'ambiente.
L'inventory è selezionato automaticamente mediante la configurazione di ansible
presente nel file playbooks/ansible.cfg
, quindi non è necessario specificarlo
nella riga di comando.
Prima di lanciare il playbook è necessario installare alcuni ruoli tra cui quello relativo all'installazione di Elasticsearch:
$ ansible-galaxy install -r playbooks/requirements.yml
$ ansible-galaxy collection install -r playbooks/requirements-collection.yml
L'installazione del cluster Kubernetes è effettuata mediante il playbook esterno kubespray che deve essere quindi clonato dal suo repository:
$ git clone --branch v2.12.0 https://github.com/kubernetes-sigs/kubespray.git playbooks/kubespray
Il playbook per l'installazione di Web Analytics Italia contiene i seguenti ruoli:
ansible-galaxy
;Il playbook contiene diversi tag che è possibile consultare dal playbook
wai.yml
.
Tutti i parametri generali modificabili sono disponibili nel file
all.yml
.
Il playbook per il deploy dell'infrastruttura e la configurazione del software
di base utilizza il file secrets.yml
per leggere
tutti i parametri che vanno tenuti segreti per motivi di sicurezza.
Per condividere il file secrets.yml
, è possibile utilizzare ansible-vault
.
Dopo aver impostato i parametri all'interno del file, si può criptare con il comando:
$ ansible-vault encrypt playbooks/secrets.yml
Decriptare il file secrets.yml
, utilizzando la password impostata con il
comando:
$ ansible-vault decrypt playbooks/secrets.yml
Prima dell'esecuzione del playbook è possibile verificare la raggiungibilità di tutti gli host presenti nell'inventory con il comando:
$ ansible all -m ping --limit 'wai'
Per l'installazione è consigliabile usare questa sequenza ordinata di tag con il comando:
$ ansible-playbook playbooks/wai.yml -b --limit 'wai' --tags=<tag>
Per generare in ambiente locale tutti i file relativi ai template si può usare il tag templates:
$ ansible-playbook playbooks/wai.yml -i playbooks/inventory/30-localhost -t templates
Le immagini docker usate per i container sono disponibili pubblicamente nella pagina dell'organizzazione Web Analytics Italia su Docker Hub.