Deploy di un Cluster PostgreSQL HA su Aruba Managed Kubernetes

Solution Cloud dédiée distribuée pour le plus grand portail de météorologie italien.

L’entreprise

3BMeteo intervient depuis 15 ans dans le secteur de la météorologie professionnelle. Les services de 3BMeteo sont conçus pour répondre aux exigences des clients à la pointe de la technologie. L'équipe est composée de météorologues professionnels et de développeurs actifs 7 jours sur 7 sur le développement de nouvelles mises à jour d'applications et de services, ainsi que de modélisateurs qui optimisent les systèmes de prévision et créent de nouveaux scénarios physiques et mathématiques.

L'une des priorités de l'entreprise est la relation avec le public, dirigée par un département média spécifique qui travaille quotidiennement avec les plus importantes radios, chaînes de télévision et journaux italiens. La salle des opérations fournit des conseils professionnels pour différents secteurs industriels et représente aujourd'hui le plus grand centre d'opérations d'Italie.

Avantages

La solution comportait un certain nombre d'améliorations, à commencer par la résilience accrue qui est implicite dans une infrastructure active/active telle que celle qui a été mise en place. Le temps de disponibilité du service est garanti grâce à la technologie de pointe fournie dans les data centers et aux accords de niveau de service (SLA) établis concernant la continuité du service contre tout type d'événement indésirable.

Parallèlement à la solution Cloud Dédié, une refonte totale de l'application 3BMeteo a également été réalisée, afin de tirer le meilleur parti de l'infrastructure distribuée active sur plusieurs nœuds simultanément et, par conséquent, de la puissance de calcul maximale, ainsi que de la tolérance aux pannes susmentionnée.

Grâce au type de Cloud dédié utilisé, l'ancienne architecture applicative (monolithique) est en fait devenue une architecture de micro-services plus agile et plus performante qui a permis :

  • une évolution plus rapide de tous les services internes et externes ;
  • la migration de parties fondamentales de ces services, telles que l'équilibrage de charge, l'authentification (Zero Trust) et la logique d'application dans Edge, qui sont désormais essentielles car capables de donner plus de flexibilité, d'évolutivité et de sécurité à un système et à un environnement en croissance constante comme 3BMeteo.


Un autre aspect pertinent est l'accent mis sur le « green IT » (le numérique responsable) : tout d'abord, la proximité du siège de 3BMeteo avec le Global Cloud Data Center d'Aruba, l'un des trois sites où se trouve l'infrastructure de 3BMeteo, qui a permis une connexion directe plus efficace et plus performante, faisant des deux entités une parfaite adéquation.

Il y a ensuite l’avantage de s’appuyer sur un fournisseur qui fournit ses services en utilisant des énergies renouvelables. Aruba est en effet certifié GO, c'est-à-dire qu'elle utilise de l'énergie avec Garantie d'Origine provenant de sources renouvelables et est en mesure de produire davantage d'énergie grâce à la présence d'une centrale hydroélectrique et de systèmes photovoltaïques au sein du campus technologique.


curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

  • Interfaccia per la gestione di PostgreSQL. Di seguito il comando per installare psql:

sudo apt update
sudo apt install curl ca-certificates -y
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /usr/share/keyrings/postgresql-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/postgresql-keyring.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt update
sudo apt install postgresql-client -y

Passaggi per il Deploy

Configurazione del cluster Aruba Managed Kubernetes

  1. Accedi al portale Aruba Cloud e apri il tuo ambiente Kubernetes.
  2. Verifica le risorse assegnate: il tuo cluster dovrebbe avere nodi sufficienti per supportare l'alta disponibilità. È consigliabile avere almeno 2 nodi.

Installazione dell'Operator di PostgreSQL

1. Aggiungi il repository Helm per il postgres-operator.


helm repo add postgres-operator-charts https://opensource.zalando.com/postgres-operator/charts/postgres-operator


kubectl create namespace my-namespace

2. Installa l'operator usando Helm nel namespace. In questo esempio è stato usato il nome per l'operator "postgres-operator" e per namespace "my-namespace", se non viene inserito il namespace sarà utilizzato quello di default.


helm install postgres-operator postgres-operator-charts/postgres-operator --namespace my-namespace

3. Verifica che l'operator sia attivo.


kubectl get pod -l app.kubernetes.io/name=postgres-operator -n my-namespace

Se il pod dell'operatore è in esecuzione puoi proseguire creando la risorsa custom postgresql (CRD).

Deploy del Cluster PostgreSQL

1. Clona e accedi al repository dell'operatore.


git clone https://github.com/zalando/postgres-operator.git


cd postgres-operator

2. In questo caso andiamo ad utilizzare un semplice manifest "minimal-postgres-manifest.yaml" per la creazione dell'istanza PostgreSQL in HA. Puoi modificare il file manifest per adattarlo al tuo ambiente.


nano ./manifests/minimal-postgres-manifest.yaml

Di seguito un esempio di file.


apiVersion: "acid.zalan.do/v1"
kind: postgresql
metadata:
name: acid-minimal-cluster
spec:
teamId: "acid"
volume:
size: 5Gi
numberOfInstances: 2
users:
zalando: # database owner
- superuser
- createdb
app_user: [] # role for application "app"
databases:
app: zalando \ # dbname: owner
preparedDatabases:
bar: {}
postgresql:
version: "17"

Nel file vengono indicati i parametri essenziali:

- nome dell'istanza;
- dimensione del volume persistente, in questo caso 5Gi, che verranno creati dinamicamente (su Aruba Cloud il volume si identifica come Block Storage);
- numero di istanze da deployare, in questo caso 2;
- utenti e database.
Prosegui con il deploy nel namespace "my-namespace".

3. Crea il cluster PostgreSQL


kubectl apply -f manifests/minimal-postgres-manifest.yaml -n

Dopo che il manifesto del cluster è stato inviato, l'operatore creerà risorse di servizio ed endpoint, oltre a uno StatefulSet che avvierà i 2 nuovi pod specificati nel manifesto.
 

Nel frattempo puoi controllare dalla Cloud Management Platform la creazione dei volumi come indicato nel manifesto.

I pod del database possono essere identificati dal suffisso del loro numero, a partire da -0.

Per quanto riguarda i servizi e gli endpoint, ce ne sarà uno per il pod master e un altro per tutte le repliche (suffisso -repl).

Controlla che tutti i componenti siano in esecuzione.

Usa la Label application=spilo per filtrare ed elencare l'etichetta spilo-role per vedere chi è attualmente il master.


kubectl get pods -l application=spilo -L spilo-role -n postgres --namespace my-namespace

Connettersi al database

Configura un port-forward su un pod del database per connetterti direttamente dal tuo host, utilizza il pod con il ruolo di master ed eseguiamo il seguente comando.


kubectl port-forward acid-minimal-cluster-0 6432:5432 -n default --namespace my-namespace

Lascia l'attività in background e apri un'altra CLI sul server, recupera la password che viene memorizzata nel secret di Kubernetes durante la creazione del cluster, che in questo caso si chiama acid-minimal-cluster.


export PGPASSWORD=$(kubectl get secret --namespace my-namespace postgres.acid-minimal-cluster.credentials.postgresql.acid.zalan.do -o 'jsonpath={.data.password}' | base64 -d)

Poiché le connessioni non crittografate vengono rifiutate di default, imposta la modalità SSL su require.


export PGSSLMODE=require

Connetti al database usando un client di postgres, ad esempio il client psql che hai preinstallato e aggiornato.


psql -U postgres -h localhost -p 6432

Collega il database "app" definito nella CRD dell'operator.


\c app

Crea una semplice tabella.


create table aruba_table(a varchar(50), b integer);

Inserisci una riga con dati.


insert into aruba_table values('Tutorial demo', '1');

Visualizza i dati appena inseriti.


select * from aruba_table;

Adesso visualizza le tabelle presenti nel database app.


** "\d"{}

Di seguito il comando per uscire dall'ambiente database.


\q

Testare l'alta affidabilità del Cluster

Elimina il pod nel cluster Kubernetes che ha il ruolo di master e verifica la procedura di failover.


kubectl delete pod acid-minimal-cluster-0 -n my-namespace

Dopo l'eliminazione verifica che il ruolo del master sia stato assegnato al pod acid-minimal-cluster-1, e che il pod acid-minimal-cluster-0 sia stato ricreato con ruolo di replica.


kubectl get pods -l application=spilo -L spilo-role -n postgres --namespace my-namespace

Vai sulla shell lasciata in background e riconnettiti sul master, che in questo caso è -1.


kubectl port-forward acid-minimal-cluster-1 6432:5432 -n default --namespace my-namespace

Connettiti al database usando il client psql preinstallato e aggiornato.


psql -U postgres -h localhost -p 6432

Collega il database "app" definito nella CRD dell'operator.


\c app

Visualizza i dati rimasti dopo la cancellazione del pod.


select * from aruba_table;

Il tuo cluster PostgreSQL HA su Aruba Managed Kubernetes è pronto all'uso.

Puoi ora procedere con il monitoraggio e la gestione operativa del tuo cluster e prepararti a scalare a seconda delle esigenze delle tue applicazioni.

Considera di esplorare ulteriormente Aruba Cloud Management Platform per automatizzare e ottimizzare ancora di più i tuoi processi IT.

Cancellazione ambiente

Di seguito la sequenza per cancellare tutto l'ambiente creato durante il tutorial.


helm uninstall postgres-operator -n my-namespace
kubectl delete all --all -n my-namespace
kubectl delete namespace my-namespace
helm repo remove postgres-operator-charts
rm -rf postgres-operator

 

Commencez maintenant avec Aruba Cloud

Vous recherchez une solution sur mesure ?

Discutez avec nos architectes de solution.

Demander un contact