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=…
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¶
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:
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:
- I backup e la finestra di ripristino spiega cos'è la finestra e cosa la mantiene integra.
- Verifica trasforma questa prova manuale in una prova settimanale con alert.
- Monitoraggio collega gli alert e la dashboard.