콘텐츠로 이동

빠른 시작

클러스터에서 이미 실행 중인 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가 데이터베이스를 백업할 네임스페이스를 나열합니다. Tenax는 그 네임스페이스에서 tenax-* 자격 증명 Secret만 읽을 수 있는 Role을 받습니다. examplePolicies는 공유 정책 prod, dev, critical을 생성합니다. 모든 값은 Helm 값에 설명되어 있습니다.

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=…
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을 실행한 뒤 kubectl get backupstores를 확인하세요. Tenax가 버킷에 접근하고 키를 파싱하면 main이 Ready가 됩니다.

3. 데이터베이스 사용자

Tenax는 tenax라는 사용자 하나로 접속합니다. 데이터베이스 사용자의 SQL로 이 사용자를 만든 뒤, 비밀번호를 데이터베이스와 같은 곳에 저장하세요.

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

어떤 초로든 복원하려면 복제 권한도 주어야 합니다. pg_hba.conf에 host replication tenax all scram-sha-256을 추가하고 다시 로드하세요. 이 작업은 나중에 해도 됩니다. 그 전까지 Tenax는 논리 백업을 수행하며, Replication 컨디션에 무엇을 추가해야 하는지 표시됩니다.

4. 대상 선언

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

1분 안에 Tenax가 대상의 streamer를 시작하고 첫 전체 백업을 자동으로 수행합니다(사유 chain-restart). 사용자에게 아직 복제 권한이 없다면 대상에 Replication=False와 해결 방법이 표시되며, 이를 적용할 때까지 백업은 논리 백업으로 수행됩니다.

kubectl -n team-a get backuptargets,backups

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이 만료되면 스스로 삭제됩니다. 다음 단계:

  • 백업과 복원 가능 기간에서 복원 가능 기간이 무엇이며 무엇이 그것을 끊기지 않게 유지하는지 설명합니다.
  • 검증은 이 수동 훈련을 알림이 붙은 주간 작업으로 바꿉니다.
  • 모니터링에서 알림과 대시보드를 연결합니다.