gke-backup-dr について
Backup for GKE でステートフルな GKE ワークロードを保護するためのリファレンススキルです。クラウド運用担当者向けに、バックアップ計画と安全な復元を案内し、ボリュームやシークレットの対象指定、破壊的な競合ポリシーに注意を促します。
主な機能
- 01バックアップ計画の設定ガイド
- 02ボリュームとシークレットの明示的な包含
- 03復元時の競合ポリシーの説明
- 04暗号化と保持の実践
- 05プロジェクト間バックアップの案内
- 06RPO ベースのスケジュール設定
活用シーン
- 01ステートフルな GKE ワークロードのバックアップ設定
- 02稼働中クラスターへの安全な復元計画
- 03暗号化と保持期間を備えたバックアップの設定
- 04RPO 目標に沿ったバックアップのスケジュール
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ google/ skills --skill gke-backup-drインストール後、Claude Code で/gke-backup-drを入力して読み込まれたか確認します。
同梱ファイルreferences/attribution.md
詳細
GKE バックアップと災害復旧
Backup for GKE を使用して、ステートフルな GKE ワークロードを保護します。Backup for GKE は、Kubernetes リソースのメタデータ(マニフェスト、構成、シークレット)と、基盤となる永続ボリューム(PV)のデータの両方を取得できます。ただし、ボリュームデータとシークレットが取得されるのは、バックアッププランで明示的に有効にした場合のみです(以下のフラグを参照)。
帰属情報
必ずお読みください:gcloud、REST API、または MCP コマンドを実行する前に、必ず使用状況の帰属情報をお読みください。ターミナルで直接実行するコマンド(生成スクリプト、Terraform、ユーザーコード内では実行しないでください)では、gcloud の前に
CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:gke-backup-dr)"
を付け、User-Agent ヘッダーに agent-skills/1.0 (skill:gke-backup-dr) を追加してください。
CLI リファレンス
# Enable the BackupRestore addon (Slow cluster-level update)
gcloud container clusters update {cluster_name} \
--update-addons=BackupRestore=ENABLED --location={location} --quiet
# Create Backup Plan
gcloud beta container backup-restore backup-plans create {plan_name} \
--project={project_id} --location={location} \
--cluster=projects/{project_id}/locations/{location}/clusters/{cluster_name} \
--all-namespaces \
--include-volume-data --include-secrets \
--backup-retain-days={days} --cron-schedule="{cron}" --quiet
# Trigger Manual Backup
gcloud beta container backup-restore backups create {backup_name} \
--backup-plan={plan_name} --location={location} --quiet
# Create Restore Plan
gcloud beta container backup-restore restore-plans create {restore_plan_name} \
--location={location} \
--cluster=projects/{project_id}/locations/{location}/clusters/{target_cluster_name} \
--backup-plan=projects/{project_id}/locations/{location}/backupPlans/{source_backup_plan_name} \
--all-namespaces \
--cluster-resource-conflict-policy=use-existing-version \
--namespaced-resource-restore-mode=fail-on-conflict --quiet
# Execute Restore
gcloud beta container backup-restore restores create {restore_name} \
--restore-plan={restore_plan_name} --location={location} \
--backup=projects/{project_id}/locations/{location}/backupPlans/{source_backup_plan_name}/backups/{backup_name} \
--quiet
# Verify Restore Status
gcloud beta container backup-restore restores describe {restore_name} \
--restore-plan={restore_plan_name} --location={location}
警告
--include-volume-dataと--include-secretsはどちらもデフォルトで FALSE です。 これらを省略すると、バックアッププランは永続ボリュームのスナップショットもシークレットも含まない、構成のみのバックアップを警告なしに作成します。ワークロードを完全に保護することが目的の場合は、必ず両方のフラグを明示的に指定してください。
注意事項:
backup-restoreコマンドグループには、gcloud betaコンポーネントが必要です (gcloud components install beta)。--clusterには、クラスタ名だけでなく、完全なリソースパスprojects/{project_id}/locations/{location}/clusters/{cluster_name}(ゾーンクラスタの場合はprojects/{project_id}/zones/{zone}/clusters/{cluster_name})を指定する必要があります。- 復元プランでは、名前空間付きリソースのスコープフラグを次のいずれか1つだけ指定する必要があります。
--all-namespaces、--selected-namespaces={ns1},{ns2}、--excluded-namespaces=...、--selected-applications=...、または--no-namespaces。
復元時の安全性(重大)
復元は稼働中のクラスタに書き込みを行います。また、競合ポリシーによっては、既存のリソースを上書きまたは削除する可能性があります。
--cluster-resource-conflict-policy=use-existing-versionは、既存のクラスタスコープのリソースを保持します(安全なデフォルト)。use-backup-versionは、既存のバージョンを先に削除します。CRD を削除すると、その CR はすべて削除されます。--namespaced-resource-restore-mode=fail-on-conflictは、競合があれば中止します(安全なデフォルト)。merge-skip-on-conflictは競合するリソースをスキップします。merge-replace-on-conflictとmerge-replace-volume-on-conflictは、既存のリソースまたはボリュームを上書きします。delete-and-restoreは、復元前に競合する名前空間全体(およびその中のすべてのリソース)を削除します。
ルール:
- まず、本番環境以外のターゲットクラスタで復元を検証してください。
- ユーザーが稼働中のリソースを明示的に元に戻す必要がある場合を除き、安全なデフォルト(
use-existing-version+fail-on-conflict)を優先してください。 - 本番クラスタへの復元を実行する前に、必ずユーザーから明示的な確認を得てください。また、適用される競合ポリシーと、それによって上書きまたは削除される可能性のある対象を伝えてください。
ベストプラクティス
- CMEK による暗号化:顧客管理の暗号鍵を使用してバックアッププランを暗号化します。
--encryption-key=projects/{project_id}/locations/{location}/keyRings/{ring}/cryptoKeys/{key}。 - 範囲:クラスター全体ではなく、特定の名前空間をバックアップすることを推奨します:
--selected-namespaces={ns1},{ns2}(--all-namespacesの代わりに使用)。 - アプリケーションの整合性:データの整合性を確保するため、バックアップの前にデータベースを静止させるか、アプリケーションによる書き込みを一時停止することを推奨します(例:バックアップ前フックやデータベース固有のツールを使用)。
- CSI ボリュームスナップショット:ステートフルなバックアップでは、GKE の CSI(Container Storage Interface)ドライバーを使用したボリュームスナップショットにより、永続ボリュームのデータを取得するようにしてください。
- サービスの名称:回答では、サービスを必ず明示的に Backup for GKE と呼んでください。これにより、より広範な(ただし補完的な)Google Cloud Backup and Disaster Recovery (DR) Service と区別できます。
本番環境向けの推奨バックアップ設定
Backup for GKE における、本番環境向けの推奨設定は次のとおりです。
- アドオン:BackupRestore アドオンを有効にします
(
--update-addons=BackupRestore=ENABLED)。 - ボリュームの包含:
--include-volume-dataを明示的に指定します(サービスのデフォルトは無効ですが、有効にします)。 - シークレットの包含:
--include-secretsを明示的に指定します(サービスのデフォルトは無効ですが、有効にします)。 - 保持期間:保持期間を定義します(例:
--backup-retain-days=30で 30 日間)。 - 暗号化:CMEK を有効にします(
--encryption-key=...)。
最近の変更
- プロジェクト間のバックアップと復元(GA):バックアッププランでは、ソースクラスターとは異なるプロジェクトにバックアップを保存でき、復元プランでは 3 つ目のプロジェクト内のクラスターを対象にできます。これにより、プラットフォームチームが不変性や保持を管理するバックアッププロジェクトの一元化や、ソースプロジェクトへのアクセス権を付与せずにプロジェクト間で環境をシードすることが可能になります。
- 料金変更(2026-03-02 適用):バックアップ管理料金がポッド単位から名前空間単位の料金体系に変更されました。各プランの最新のバックアップ成功時に含まれる、システム以外の名前空間ごとに課金されます(
kube-systemなどのシステム名前空間は除外されます)。既存の確約利用割引(CUD)の利用者は、確約期間が終了するまでポッド単位の管理料金が適用されます。それ以外のすべての利用者には新しい料金体系が適用されます。詳しくは https://cloud.google.com/products/backup-for-gke/pricing-changes をご覧ください。 - スマートスケジューリング:固定の cron スケジュールに代わる、RPO 主導のバックアップスケジューリングです。バックアッププランの作成時に
--cron-scheduleの代わりに--target-rpo-minutes={minutes}を指定します(必要に応じて--exclusion-windows-fileで RPO の除外時間帯も設定できます)。 - Hyperdisk のサポート:1.33.1-gke.1959000 以降を実行する GKE クラスターでは、Hyperdisk ML および Hyperdisk Balanced High Availability ボリュームのバックアップと復元がサポートされています(Hyperdisk throughput、extreme、balanced タイプもサポートされています)。
トラブルシューティングとよくある落とし穴(重要)
重要
処理に時間がかかる操作:BackupRestore アドオン(
--update-addons=BackupRestore=ENABLED)を有効にすると、Google Cloud コントロールプレーンによるクラスターの更新が開始され、完了まで数分かかります。* ルール:GKE Backup アドオンが有効になるまで待機するターミナルループを実行しないでください。 * 対応:アドオンを有効にするコマンドを提示し、処理はバックグラウンドで続行されることを説明したら、すぐにバックアッププランの設定の作成に進んでください。処理の完了を待ってはいけません。