クイックスタート¶
クラスターですでに動いている Postgres データベースを、バックアップがない状態から検証済みの復元まで、約 10 分で進めます。
必要なのは、クラスターへの kubectl と helm のアクセス、認証情報付きの S3 互換バケット、そして手元のマシンの
age です。
手元にクラスターがない場合
まずは デモサーバーでコンソールと CLI を試してください。コマンドひとつで、Kubernetes もデータベースも不要です。
1. 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 には、Tenax がデータベースをバックアップする Namespace を列挙します。Tenax はそこで
tenax-* の認証情報 Secret を読む Role だけを得ます。examplePolicies は共有の prod、dev、critical
ポリシーを作成します。すべての値は Helm values で説明しています。
2. 鍵とバケット¶
すべてのバックアップを暗号化する鍵ペアを生成します。tenax-backups.key のオフラインコピーを必ず保管してください。
これがないとどのバックアップも復元できません。
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 を実行し、続けて kubectl get backupstores を実行します。Tenax がバケットに到達し、
鍵を解析できると main は Ready になります。
3. データベースユーザー¶
Tenax はひとつのユーザー tenax で接続します。データベースユーザー の SQL で作成し、
そのパスワードをデータベースと同じ Namespace に保存します。
kubectl -n team-a create secret generic tenax-postgres --from-literal=username=tenax --from-literal=password=…
任意の 1 秒への復元を行うには、レプリケーションも許可します。pg_hba.conf に host replication tenax all scram-sha-256
を追加してリロードしてください。これは後からでも構いません。それまで Tenax は論理バックアップを取り、Replication
コンディションに追加すべき内容が表示されます。
4. ターゲットを宣言する¶
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
1 分以内に Tenax はターゲットのストリーマーを起動し、最初のフルバックアップを自動で取得します
(理由は chain-restart)。ユーザーにまだレプリケーション権限がない場合、ターゲットには代わりに修正方法とともに
Replication=False が表示され、修正を適用するまでバックアップは論理バックアップになります。
5. 意図して復元する¶
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"
復元は成功を報告する前にチェックを実行します。サンドボックスは TTL が切れると自動的に削除されます。次に読むもの:
- バックアップと復元ウィンドウ では、ウィンドウとは何か、何がそれを途切れさせないかを説明します。
- 検証 では、この手動の訓練を、アラート付きの毎週の検証にします。
- モニタリング では、アラートとダッシュボードを設定します。