Skip to main content

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​

PlantillaDesplegaAccionsDocumentació
Linux Cloud Image Downloader (ISO)La cloud image d'Ubuntu en un datastore de Proxmox-Linux
Ubuntu Base ServerUna VM Ubuntu sense serveis-Linux
PostgreSQL ServerPostgreSQL amb PgBouncer, exporter i còpies de seguretatCreate UserPostgreSQL
MonitoringPrometheus, Loki, Tempo, Grafana i cAdvisor darrere de Traefik-Monitorització
Kubernetes ClusterUn clúster kubeadm, un control plane i N workersUpgrade control plane, Renew certificatesKubernetes
GitLab RunnerUn 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​

RutaContingut
<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:

ServeiCheckPlantilla
Hard disk - Rootcheck_nrpe_disk_rootsora-hdd
Hard disk - Datacheck_nrpe_disk_data (només si hi ha disc de dades)sora-hdd
Current Userscheck_nrpe_userssora-service
Total Processescheck_nrpe_total_procssora-service
Zombie Processescheck_nrpe_zombie_procssora-service
Current Loadcheck_nrpe_loadsora-service
PINGcheck_pingsora-service
SSHcheck_sshsora-service
Prometheus Node ExporterHTTP 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.