Vai al contenuto

Avvio rapido

Questa guida porta un database Postgres che gira già nel tuo cluster da nessun backup a un ripristino testato in circa dieci minuti. Ti servono l'accesso al cluster con kubectl e helm, un bucket compatibile S3 con le credenziali e age sulla tua macchina.

Non hai un cluster a portata di mano?

Prova prima la console e la CLI su un server demo: un solo comando, niente Kubernetes, niente database.

1. Installare Tenax

helm install tenax oci://registry.example.com/helm/tenax --version 0.1.0 \
  -n tenax-system --create-namespace \
  --set image.repository=registry.example.com/tenax/tenax --set image.tag=v0.1.0 \
  --set 'targetNamespaces={team-a}' \
  --set examplePolicies.enabled=true --set examplePolicies.store=main

targetNamespaces elenca i namespace di cui Tenax esegue il backup dei database; lì Tenax riceve un Role per leggere i secret di credenziali tenax-* e nient'altro. examplePolicies crea le policy condivise prod, dev e critical. Ogni valore è descritto in Valori Helm.

2. Chiavi e bucket

Genera la coppia di chiavi che cifra ogni backup. Conserva una copia offline di tenax-backups.key: senza di essa nessun backup può essere ripristinato.

age-keygen -o tenax-backups.key        # prints "Public key: age1…"
kubectl -n tenax-system create secret generic tenax-age-identity \
  --from-literal=identity="$(grep AGE-SECRET-KEY tenax-backups.key)"
kubectl -n tenax-system create secret generic tenax-s3 \
  --from-literal=accessKeyId=AKIA… --from-literal=secretAccessKey=…
store.yaml
apiVersion: tenax.run/v1alpha1
kind: BackupStore
metadata:
  name: main
spec:
  s3:
    endpoint: https://s3.us-east-1.amazonaws.com
    region: us-east-1
    bucket: db-backups
    credentialsSecret: { namespace: tenax-system, name: tenax-s3 }
  encryption:
    ageRecipients: [age1qxyz…]                        # the public key from age-keygen
    identitySecret: { namespace: tenax-system, name: tenax-age-identity }

kubectl apply -f store.yaml, poi kubectl get backupstores: main diventa Ready non appena Tenax raggiunge il bucket e le chiavi vengono lette correttamente.

3. L'utente di database

Tenax si connette con un solo utente, tenax. Crealo con l'SQL in Utenti di database, poi salva la sua password accanto al database:

kubectl -n team-a create secret generic tenax-postgres --from-literal=username=tenax --from-literal=password=…

Per poter ripristinare qualsiasi secondo, consentigli anche la replica: aggiungi host replication tenax all scram-sha-256 a pg_hba.conf e ricarica la configurazione. Puoi farlo anche più tardi. Fino ad allora Tenax esegue backup logici e la sua condizione Replication indica cosa aggiungere.

4. Dichiarare il target

target.yaml
apiVersion: tenax.run/v1alpha1
kind: BackupTarget
metadata:
  name: app
  namespace: team-a
  labels:
    tenax.run/org: acme
    tenax.run/project: shop
    tenax.run/env: prod
spec:
  engine: postgres
  endpoint: { host: postgres, port: 5432 }
  databases: [app]
  policy: prod                 # nightly fulls, 7-day point-in-time window
  credentials:
    secretRef: { name: tenax-postgres }
  checks:
    - name: orders-not-empty
      database: app
      sql: select count(*) > 0 from orders

Entro un minuto Tenax avvia uno streamer per il target ed esegue da solo il primo backup completo (motivo chain-restart). Se l'utente non può ancora replicare, il target mostra invece Replication=False con la correzione da applicare, e i backup restano logici finché non la applichi:

kubectl -n team-a get backuptargets,backups

5. Ripristinare, di proposito

tenax login --server https://tenax.example.com     # or TENAX_SERVER + port-forward, see Console, CLI and access
tenax targets
tenax restore team-a/app --at "$(date -u -d '-10 min' +%FT%TZ)" --wait
tenax query <sandbox> -e "select count(*) from orders"

Il ripristino esegue i tuoi controlli prima di segnalare il successo. La sandbox si elimina da sola alla scadenza del suo TTL. Prossimi passi: