Inicio rápido¶
Esta guía lleva una base de datos Postgres que ya se ejecuta en tu clúster de no tener respaldos a una restauración
probada en unos diez minutos. Necesitas acceso con kubectl y helm al clúster, un bucket compatible con S3 con sus
credenciales y age en tu máquina.
¿No tienes un clúster a mano?
Primero prueba la consola y la CLI contra un servidor de demostración: un comando, sin Kubernetes, sin base de datos.
1. Instalar 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 enumera los namespaces cuyas bases de datos respalda Tenax; allí Tenax recibe un Role para leer los
secretos de credenciales tenax-* y nada más. examplePolicies crea las políticas compartidas prod, dev y
critical. Cada valor se describe en Valores de Helm.
2. Claves y bucket¶
Genera el par de claves que cifra cada respaldo. Guarda una copia offline de tenax-backups.key: sin ella no se
puede restaurar ningún respaldo.
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 y luego kubectl get backupstores: main pasa a Ready en cuanto Tenax alcanza el
bucket y las claves se leen correctamente.
3. El usuario de base de datos¶
Tenax se conecta con un solo usuario, tenax. Créalo con el SQL de Usuarios de base de datos y
guarda su contraseña junto a la base de datos:
kubectl -n team-a create secret generic tenax-postgres --from-literal=username=tenax --from-literal=password=…
Para restaurar a cualquier segundo, permítele además replicar: añade host replication tenax all scram-sha-256 a
pg_hba.conf y recarga. Puedes hacerlo más tarde. Mientras tanto, Tenax toma respaldos lógicos y su condición
Replication indica qué añadir.
4. Declarar el objetivo¶
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
En menos de un minuto Tenax inicia un streamer para el objetivo y toma por sí solo el primer respaldo completo
(motivo chain-restart). Si el usuario aún no puede replicar, el objetivo muestra Replication=False con la
solución, y los respaldos son lógicos hasta que la apliques:
5. Restaurar, a propósito¶
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"
La restauración ejecuta tus comprobaciones antes de informar de que ha terminado bien. El sandbox se borra solo cuando vence su TTL. A continuación:
- Respaldos y la ventana de restauración explica qué es la ventana y qué la mantiene sin cortes.
- Verificación convierte este simulacro manual en uno semanal y con alertas.
- Monitorización conecta las alertas y el dashboard.