はじめに
前回はKubernetesのバックアップは、etcdとPV/PVCの二軸で、セットで行うことが重要であることを解説しました。しかし、ステートフルなアプリケーションのバージョンアップでは、データの互換性と整合性が課題となります。
本記事では、これらの複雑な課題を解消し、安全なリソースとデータのバックアップ・リストアを実現するソリューションである「Velero」について解説します。
Veleroの基本コンセプトとアーキテクチャ
Velero(旧称 Heptio Ark)は、Kubernetesクラスターリソース(マニフェストファイル)と永続ボリューム(PV)のデータの両方をまとめてバックアップ/リストアを実現するツールです。
Kubernetesのバックアップでは、アプリケーションを構成するすべてのクラスターリソースをバックアップするだけでは不十分で、データ(永続ボリューム)も同時に保存する必要があります。これは、Veleroを使うことで実現可能です。
さらに、クラウドプロバイダーの変更やオンプレミスからクラウドへの移行、Kubernetesのメジャーバージョンアップに伴う新しいクラスターへのデータ移行といった複雑で時間がかかる作業もVeleroでは対応可能になります。
Veleroは以下の用途で利用できます。
- クラスターのバックアップを取得し、データ損失が発生した場合にリストアを行う
- クラスターリソースを他のクラスターへ移行する
- 本番クラスターを開発/テストクラスターへ複製する
- Kubernetesのアップグレードなどのシステム操作を実行する前に、アプリケーションの状態をスナップショットする
Veleroの主な特徴
- クラスター内のすべてのオブジェクトをバックアップまたはリストアできる。オブジェクトタイプ、ネームスペース、ラベルによるフィルタリングも可能
- バックアップ、リストア、スケジュールといったすべての操作の定義がKubernetesのカスタムリソースとして定義され、etcdに保存される
- クラウドプロバイダーまたはオンプレミスのKubernetes環境で動作可能
- 独自のカスタム機能をVeleroに追加できるプラグインシステムが提供されている
PVのバックアップ方式
Veleroは、永続ボリューム(PV)のデータを保護するために、主に以下の3つの方式をサポートしています。ファイルシステムバックアップ(FSB)とスナップショットは、同一ボリュームに対して同時に実行されず、相互に排他的な関係になります。
| 方式 | 概要 | 主な用途 |
| ボリュームスナップショット | クラウドプロバイダー(AWS EBS, Azure Disk等)やCSIドライバーが提供するネイティブなスナップショット機能を利用する。 | 主要なクラウドプロバイダーやCSI準拠のストレージを利用している場合の標準的なデータ保護。 |
| ファイルシステムバックアップ (FSB) | Node Agent (Kopia Uploader) と呼ばれるDaemonSetが各ノードで稼働し、ボリュームのファイルシステムを直接読み取り、オブジェクトストレージにデータを保存する。 | NFSのような共有ファイルシステムや、CSIドライバーが提供するスナップショット機能を持たないストレージのデータ保護。プロバイダー間の移行に利用可能。 |
| CSIスナップショットデータムーバー | CSIスナップショットで作成されたデータを、Node Agent経由でオブジェクトストレージに移動・コピーする。 | クラウドプロバイダ間のデータ移行、オンプレミスからクラウドへのデータ移行、スナップショットデータの長期アーカイブ。 |
Veleroアーキテクチャ
Veleroの主要リソースは以下の通りです。
バックアップ、リストア、スケジュールといった操作はクライアントのVelero CLIから実行します。
| 主要リソース | 役割 | 実行環境 |
| Velero サーバー | メインコントロールプレーン。バックアップ/リストアのロジック、リソースの収集、オブジェクトストレージへの連携を担当する。 | Kubernetesクラスター内のDeployment。 |
| Node Agent | ファイルシステムバックアップ(FSB)やCSIスナップショットデータムーバーなどのデータ転送を担う。 | Kubernetesクラスター内のDaemonSet。 |
| BackupStorageLocation (BSL) | KubernetesリソースのメタデータやPVデータ(FSB/データムーバー利用時)の保存場所(オブジェクトストレージ)を定義する。 | オブジェクトストレージ(AWS S3、Azure Blob、MinIOなど)。 |
| VolumeSnapshotLocation (VSL) | PVスナップショットの保存場所を定義。 | CSIドライバー対応のスナップショットシステム。 |
バックアップのワークフロー
VeleroによるKubernetesリソースと永続ボリュームのオンデマンドバックアップのワークフローは以下になります。

Image Source:https://velero.io/docs/v1.17/how-velero-works/
- VeleroクライアントがKubernetes APIサーバーを呼び出してBackupオブジェクトを作成する
- BackupControllerが新しいBackupオブジェクトを認識して、検証を行う
- BackupControllerがバックアッププロセスを開始する。APIサーバーにリソースを照会してバックアップするデータを収集する
- 収集したオブジェクトをtar形式にアーカイブし、BackupControllerがオブジェクトストレージサービス(AWS S3など)を呼び出して、バックアップファイルをアップロードする
- 永続ボリューム(PV)が存在する場合、連携するストレージプロバイダのAPIを呼び出し、ボリュームのスナップショットを作成する
- フック(Backup Hooks)が設定されている場合、カスタムアクション処理の前(pre hook)または、すべてのカスタムアクション完了および追加アイテムのバックアップ完了後(post hook)に、Pod内のコンテナでコマンドが実行される
- スケジュールされたバックアップは、Cron式で指定された間隔で自動的に実行される
Veleroのフック(Hook)機能とは?
データベースのようなアプリケーションは、DBのバックアップ中にデータが書き換わると整合性が取れなくなる可能性があります。Veleroのフック(Hook)機能は、この問題を解決するために、バックアップ処理に合わせてコンテナ内で任意のコマンドを実行する機能です。例として、Veleroのフック機能は以下のようなことが可能です。
- Pre-hook(直前):データの書き込みをロックし、静止点を作成
- Post-hook(直後): バックアップ完了後にロックを解除し、通常稼働に復帰
Veleroでのリストア
VeleroによるKubernetesリソースと永続ボリュームのリストアのワークフローは以下になります。
- VeleroクライアントがKubernetes APIサーバーを呼び出してRestoreオブジェクトを作成する
- RestoreControllerが新しいRestoreオブジェクトを認識して、検証を行う
- RestoreControllerがオブジェクトストレージサービスからバックアップ情報を取得する。次に、バックアップされたリソースに対して前処理を行い、リソースが新しいクラスターで動作することを確認する
- RestoreControllerがリストアプロセスを開始する。依存関係を考慮した適切な順序で対象となるリソースが1つずつ復元される
- フック(Restore Hooks)が設定されている場合、以下のタイミングでリストアされるPod内のコンテナに対して実行される
- InitContainer:リストアされるPodにInitコンテナを追加して、アプリケーションコンテナが開始される前に必要なセットアップを実行する。PVと紐づく場合は、PVのリストア後に実行される
- Exec:リストアされたPodのコンテナが起動した後、コンテナ内でカスタムコマンドまたはスクリプトが実行される
デフォルトではリストア時にターゲットクラスタ上のデータは削除されません。バックアップ内の同名リソースがターゲットクラスタ内に既に存在する場合は、そのリソースをスキップします。「update」フラグがある場合、リソースを更新します。
他のバックアップ手法との比較
VeleroはKubernetesネイティブなOSSバックアップソリューションです。他のKubernetesのバックアップソリューションとしては、Cohesity、Commvault、Rubrikが挙げられますが、いずれもエンタープライズ向け包括バックアップ製品の一機能としてKubernetesのバックアップ機能を提供しています。
- Cohesity
- 初回以降は変更分のみをバックアップする永久増分バックアップを採用しており、バックアップ時間の短縮とネットワーク・ストレージ負荷の低減が強みです。
- Commvault
- AKS/EKS/Openshiftなどのマルチクラウド、マルチディストリビューションのクラスターを1つの画面で統合管理できます。アプリ単体だけでなく、クラスタ全体を保護できる広範なバックアップが特徴です。
- Rubrik
- 書き換え不可能な(不変)バックアップとゼロトラストアーキテクチャを採用し、ランサムウェア対策と整合性を提供しています。アプリとデータ状態の整合性を厳密に保ったままバックアップできる点が強みです。
Kubernetesだけを低コストでバックアップしたい場合はVeleroが第一候補に挙がります。既にCohesity、Commvault、Rubrikを使用している、またはKubernetes以外もバックアップ対象に含めたい場合は既存・導入予定のプラットフォームに寄せる方が現実的です。
まとめ
本記事では、Kubernetesのリソースと永続ボリュームを包括的に保護できるVeleroについて解説しました。Veleroは、Hook機能を利用してデータベースの整合性を確保できる点や、環境に応じてスナップショットとファイルシステムバックアップを使い分けられる柔軟性が強みです。
次回は、実際にVeleroをKubernetesへ導入するための構築手順と設定方法について詳しく解説します。
参考文献
https://github.com/vmware-tanzu/velero
https://www.cohesity.com/ja-jp/solutions/kubernetes/

