Deploy di un Cluster PostgreSQL HA su Aruba Managed Kubernetes

Deploy di un Cluster PostgreSQL HA su Aruba Managed Kubernetes

Introduzione

In questo tutorial, imparerai come implementare un cluster PostgreSQL ad alta disponibilità (HA) utilizzando l'infrastruttura Aruba Managed Kubernetes.

Utilizzeremo l'operatore PostgreSQL per distribuire istanze PostgreSQL su un cluster con almeno 2 nodi.

Con un ambiente gestito, come quello offerto da Aruba Cloud, non devi preoccuparti della gestione dell'infrastruttura Kubernetes, puoi concentrarti al 100% sulle tue applicazioni e sui tuoi servizi.

Per guardare il video, devi abilitare i cookie dal pannello dei cookie

oppure

Guarda il video su YouTube

Prerequisiti

  • Un account su Aruba Cloud https://www.cloud.it/home.aspx
  • Un cluster Aruba Managed Kubernetes con almeno 2 nodi https://kb.cloud.it/cmp/container/kubernetes/creare-cluster-kubernetes.aspx
  • kubectl, tool a riga di comando per interagire con il tuo cluster Kubernetes https://kubernetes.io/docs/tasks/tools/
  • Helm per installare e gestire i pacchetti su cluster Kubernetes. Di seguito il comando per installare Helm:
  •     
          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.
  2.     
          helm repo add postgres-operator-charts https://opensource.zalando.com/postgres-operator/charts/postgres-operator
        
      
        
          kubectl create namespace my-namespace
        
      
  3. 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.
  4.     
          helm install postgres-operator postgres-operator-charts/postgres-operator --namespace my-namespace
        
      
  5. Verifica che l'operator sia attivo.
  6.     
          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.
  2.     
          git clone https://github.com/zalando/postgres-operator.git
        
      
        
          cd postgres-operator
        
      
  3. 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.
  4.     
          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".

  5. Crea il cluster PostgreSQL
  6.     
          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 al 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