Introducció
sora-project-infrastructure conté les plantilles que importa Sora Horizon i tot el que necessiten: els projectes de Terraform, els scripts de cada fase, les accions, la configuració dels serveis i els checks de Nagios.
Cada aplicació és un stack d'Horizon desplegat per fases: la màquina primer (sempre el mateix servidor Ubuntu base) i després els scripts que instal·len el que aquella màquina ha de ser. Canviar un ajust és editar l'stack, cosa que torna a executar únicament el treball afectat.
Plantilles
| Plantilla | Desplega | Accions | Documentació |
|---|---|---|---|
| Linux Cloud Image Downloader (ISO) | La cloud image d'Ubuntu en un datastore de Proxmox | - | Linux |
| Ubuntu Base Server | Una VM Ubuntu sense serveis | - | Linux |
| PostgreSQL Server | PostgreSQL amb PgBouncer, exporter i còpies de seguretat | Create User | PostgreSQL |
| Monitoring | Prometheus, Loki, Tempo, Grafana i cAdvisor darrere de Traefik | - | Monitorització |
| Kubernetes Cluster | Un clúster kubeadm, un control plane i N workers | Upgrade control plane, Renew certificates | Kubernetes |
| GitLab Runner | Un GitLab Runner a Docker | - | GitLab Runner |
Els descriptors són a la carpeta horizon/. Per fer-los servir, n'hi ha prou d'importar el repositori a Application Templates i ISO Templates d'Horizon.
Ordre de desplegament
- La imatge Linux és la base de totes les VMs.
- PostgreSQL va abans que qualsevol cosa que guardi dades (Keycloak i les aplicacions de Kubernetes).
- La monitorització va abans que Kubernetes, que li envia la seva telemetria.
- El GitLab Runner només necessita la imatge.
Estructura del repositori
| Ruta | Contingut |
|---|---|
<aplicació>/ | Una aplicació desplegable amb tot el que necessita: els scripts de les seves fases (jobs/), les seves accions, la seva configuració, els seus checks de Nagios i la seva documentació (docs/) |
linux-image/ | La cloud image de Linux que fan servir totes les VMs |
linux/ | El servidor Ubuntu base, primera fase de totes les aplicacions |
modules/ | Mòduls de Terraform reutilitzables, publicats al registre de mòduls de GitLab |
horizon/ | Els descriptors de les plantilles d'Horizon |
nagios_config/ | Les convencions de Nagios: els checks base, les plantilles de servei i les ordres NRPE |
Nagios
Totes les VMs es monitoritzen amb NRPE i el Node Exporter de Prometheus. Cap projecte no es connecta a Nagios: cada plantilla llista els checks de les seves màquines al seu bloc nagios:, i Horizon els publica en desplegar i els treu en destruir. El Terraform i els scripts només preparen l'agent NRPE i les seves ordres.
Totes les VMs comencen amb els mateixos checks base, i cada aplicació hi afegeix els seus:
| Servei | Check | Plantilla |
|---|---|---|
| Hard disk - Root | check_nrpe_disk_root | sora-hdd |
| Hard disk - Data | check_nrpe_disk_data (només si hi ha disc de dades) | sora-hdd |
| Current Users | check_nrpe_users | sora-service |
| Total Processes | check_nrpe_total_procs | sora-service |
| Zombie Processes | check_nrpe_zombie_procs | sora-service |
| Current Load | check_nrpe_load | sora-service |
| PING | check_ping | sora-service |
| SSH | check_ssh | sora-service |
| Prometheus Node Exporter | HTTP a la seva URL de mètriques (només si està instal·lat) | sora-metrics |
Les plantilles sora-* i les ordres les publica el Nagios de Conductor, així que no cal afegir res a Nagios per monitoritzar una màquina nova. El host group de cada VM l'escull l'operador en desplegar, ja que indica l'entorn.
Nagios i la monitorització amb Grafana responen preguntes diferents i es mantenen totes dues: Nagios diu si un host i els seus serveis funcionen, Grafana diu què expliquen les dades recollides.
Mòduls
Els mòduls de modules/ es publiquen al registre de mòduls de Terraform de GitLab i es fan servir amb versió:
module "iso" {
source = "gitlab.com/ReiIzumi/proxmox-iso/proxmox"
version = "1.0.0"
}
El projecte és públic, així que terraform init els descarrega sense token. Per publicar una versió, n'hi ha prou de crear un tag <mòdul>/v<semver>:
git tag proxmox-iso/v1.0.1
git push origin proxmox-iso/v1.0.1
Mantenir les plantilles
Canviar les variables d'un projecte o d'un script obliga a pujar el version de tots els descriptors que el fan servir: Horizon només torna a llegir el codi en sincronitzar quan la versió remota és més gran. Un canvi sense pujar la versió és a Git, però és invisible per a Horizon.