バックアップと災害復旧
信頼性の高い目標復旧時間 (RTO) と目標復旧時点 (RPO) を実現するため、 このアーキテクチャは二層の災害復旧戦略を採用しています。一方の層はアクティブな OpenShift クラスターを保護し、もう一方の層は外部 VM 層を保護します。
目標とカバレッジマトリクス
目標値は顧客ごとに調整されます。以下の表は基準となるベースラインです。
| コンポーネント | 方式 | 頻度 | RPO (ベースライン) |
|---|---|---|---|
| PostgreSQL | フル + 増分 + VM スナップショット | 継続的な WAL + 日次フル | ≤ 5 分 |
| OpenBao / シークレットエンジン | Raft スナップショット | 毎時 | ≤ 1 時間 |
| アプリケーション状態 (PV) | Velero CSI スナップショット | 日次 | ≤ 24 時間 |
| K8s マニフェスト / 構成 | Velero メタデータバックアップ | 日次 | ≤ 24 時間 |
| GitLab (ソース) | 組み込みバックアップ | 日次 | ≤ 24 時間 |
| HSM マテリアル | HSM 内に保持 (ベンダーごとに複製) | 該当なし | 該当なし |
| シナリオ | 目標 RTO (ベースライン) |
|---|---|
| 単一 Pod / ノードの障害 | 自動、数秒 (自己修復) |
| ステートフルコンポーネントの復元 | 1 時間未満 |
| サイト全体のフェイルオーバー (セカンダリクラスター) | 4 時間未満 |
災害復旧のライフサイクル
第 1 層 — バックアップ運用 (アクティブクラスター)
- オーケストレーション — Velero オペレーターが OpenShift クラスター内で スケジュールされた自動スナップショットを実行します。
- データ状態 — Velero は ODF または CSI プラグインと連携し、ステートフルワークロードを 支えるボリュームのクラッシュコンシステントなブロックスナップショットを取得します。
- マニフェストとメタデータ — Velero は同時に Kubernetes API オブジェクト (名前空間、ServiceAccount、ArgoCD アプリケーション) をキャプチャします。
- ターゲット — すべてのバックアップメタデータとボリュームペイロードは暗号化され、 クラスター外部の S3 互換オブジェクトストレージに書き込まれます。
# Example: a daily scheduled backup of the duokey namespace
velero schedule create duokey-daily \
--schedule="0 2 * * *" \
--include-namespaces duokey \
--snapshot-volumes
第 2 層 — インフラストラクチャバックアップ (外部 VM)
- OpenBao — 自動化された Raft ストレージスナップショットをトリガーすることで 独立してバックアップされます。暗号化されたスナップショットファイルはノード外の オブジェクトストレージに保存されます。
- GitLab — 組み込みのバックアップタスクを使用して、リポジトリ、データベース、 構成をオブジェクトストレージにアーカイブします。
- PostgreSQL — 最も重要なデータ層として、複数の補完的な方式を使用します。 VM スナップショットに加えて、スケジュールされたフルおよび増分データベース バックアップを行います。
# OpenBao Raft snapshot (illustrative)
bao operator raft snapshot save openbao-$(date +%F).snap
復旧手順 (セカンダリ / パッシブサイト)
アクティブクラスターに影響する壊滅的な障害が発生した場合:
- ターゲットクラスターのプロビジョニング — 復旧サイト / アベイラビリティゾーンで セカンダリの最小構成 OpenShift クラスターをアクティブ化または初期化します。
- シークレットエンジンの復元 — セカンダリの OpenBao インスタンスが封印を解除し、 複製された Raft スナップショットを読み込んで、鍵機能を復元します。
- Velero 復元の実行 — Velero は復旧サイトの複製されたオブジェクトストレージに 接続し、グローバル復元を実行します。
- ボリュームの再展開 — CSI ドライバーがブロックスナップショットを復元し、 新たに起動された PostgreSQL および Redis の StatefulSet Pod にバインドします。
- GitOps 調整 — ArgoCD が HTTPS/SSH 経由で GitLab に再接続し、マニフェストを スキャンして、あらゆるドリフトをコンプライアンス状態に調整し直します。
- PostgreSQL の復元 — オブジェクトストレージ内の最新のデータベースバックアップから 復元します。バックアップを再生できない場合は、フル VM スナップショットにフォールバックします。
# Restore from the most recent Velero backup
velero restore create --from-backup duokey-daily-<timestamp>
DR 計画のテスト
実際の災害を待たないでください
定期的なペース (少なくとも四半期ごと) で復旧手順をリハーサルしてください。 RTO/RPO 目標が実際に達成されていること、ランブックが最新であることを検証します。
| 項目 | 頻度 |
|---|---|
| バックアップ完了の検証 | 日次 (自動アラート) |
| 復元テスト (単一コンポーネント) | 月次 |
| フル DR フェイルオーバーリハーサル | 四半期ごと |
| RTO/RPO 目標のレビュー | 年次 |