Szybki start¶
Ten przewodnik prowadzi bazę danych Postgres, która już działa w Twoim klastrze, od braku kopii zapasowych do
przetestowanego przywracania w około dziesięć minut. Potrzebujesz dostępu kubectl i helm do klastra, bucketu
zgodnego z S3 wraz z danymi uwierzytelniającymi oraz age na swoim komputerze.
Nie masz pod ręką klastra?
Najpierw wypróbuj konsolę i CLI na serwerze demonstracyjnym: jedno polecenie, bez Kubernetes, bez bazy danych.
1. Zainstaluj 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 wymienia namespace'y, których bazy danych Tenax archiwizuje; Tenax dostaje tam Role do odczytu
secretów z danymi uwierzytelniającymi tenax-* i niczego więcej. examplePolicies tworzy współdzielone polityki
prod, dev i critical. Każda wartość jest opisana w Wartościach Helm.
2. Klucze i bucket¶
Wygeneruj parę kluczy, która szyfruje każdą kopię zapasową. Zachowaj kopię offline pliku tenax-backups.key: bez
niego żadnej kopii zapasowej nie da się przywrócić.
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, potem kubectl get backupstores: main przechodzi w Ready, gdy Tenax połączy się
z bucketem i poprawnie wczyta klucze.
3. Użytkownik bazy danych¶
Tenax łączy się jednym użytkownikiem, tenax. Utwórz go za pomocą SQL z Użytkowników baz danych,
a następnie zapisz jego hasło obok bazy danych:
kubectl -n team-a create secret generic tenax-postgres --from-literal=username=tenax --from-literal=password=…
Aby przywracać do dowolnej sekundy, pozwól mu też na replikację: dodaj host replication tenax all scram-sha-256 do
pg_hba.conf i przeładuj konfigurację. Możesz to zrobić później. Do tego czasu Tenax wykonuje logiczne kopie
zapasowe, a jego warunek Replication mówi, co dodać.
4. Zadeklaruj cel¶
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
W ciągu minuty Tenax uruchamia streamer dla celu i sam wykonuje pierwszą pełną kopię zapasową
(powód chain-restart). Jeśli użytkownik nie może jeszcze replikować, cel pokazuje zamiast tego Replication=False
z poprawką, a kopie zapasowe są logiczne, dopóki jej nie zastosujesz:
5. Przywróć, celowo¶
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"
Przywracanie uruchamia Twoje sprawdzenia, zanim zgłosi sukces. Piaskownica usuwa się sama, gdy wygaśnie jej TTL. Dalej:
- Kopie zapasowe i okno przywracania wyjaśnia, czym jest okno i co utrzymuje je nieprzerwanym.
- Weryfikacja zamienia to ręczne ćwiczenie w cotygodniowe, z alertami.
- Monitorowanie podłącza alerty i dashboard.