Skip to content

AgID/wai-infrastructure

develop
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Web Analytics Italia - Infrastructure

WAI infrastructure CI

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.

Architettura

Requisiti

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.

Provisioning a livello IaaS

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.

Utilizzo

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.

Installazione

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.

Inventory dinamico

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.

Ruoli e playbook esterni

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

Ruoli

Il playbook per l'installazione di Web Analytics Italia contiene i seguenti ruoli:

  • infrastructure: utilizzato per alcuni task di preparazione degli host;
  • elastic.elasticsearch: installazione di Elasticsearch tramite i ruoli installati con ansible-galaxy;
  • kibana: installazione di Kibana;
  • glusterfs: installazione di GlusterFS;
  • mariadb: installazione di MariaDB;
  • galera: configurazione dei cluster Galera
  • kubernetes: installazione del cluster Kubernetes con il playbook esterno kubespray;
  • openvpn_server: installazione di un server OpenVPN;
  • prometheus_mysqld_exporter e prometheus_node_exporter: installazione di exporters per la raccolta di metriche con Prometheus;

Tags

Il playbook contiene diversi tag che è possibile consultare dal playbook wai.yml.

Parametri

Tutti i parametri generali modificabili sono disponibili nel file all.yml.

Parametri sensibili

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

Esecuzione Playbook

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>
  1. infrastructure: controlli iniziali sui requisiti;
  2. openvpn: server OpenVPN;
  3. elastic,kibana: ElasticSearch e Kibana;
  4. galera,mariadb: DBMS e cluster;
  5. gluster: GlusterFS;
  6. matomo: database Matomo;
  7. kubernetes: cluster Kubernetes;
  8. elastic-deploy: risorse di ElasticSearch;
  9. kubernetes-deploy: risorse di Kubernetes;
  10. kubernetes-deploy-helm: risorse di Kubernetes via Helm;

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

Immagini per i container

Le immagini docker usate per i container sono disponibili pubblicamente nella pagina dell'organizzazione Web Analytics Italia su Docker Hub.