Kubernetesクラスタがクラッシュしても冷静を保つ方法、あるいはVeleroが必要な理由
このような状況を想像してみてください。金曜日の夜、リラックスしようとしていると、Slack通知が突然表示されます——本番環境のKubernetesクラスタの1つが停止してしまったのです。設定ミス、クラウドプロバイダーの障害、あるいは単なる人的エラー——原因は今や重要ではありません。重要なのは、すべてを迅速に元の状態に復旧できるかどうかです。GitにYAMLファイルしかない場合、ステートフルアプリケーションとそのデータを復旧するのは至難の業でしょう。
ここでVeleroの出番です。VMware(元の作成者はHeptio)によるプロジェクトで、K8s界のバックアップにおける事実上の標準となっています。
Veleroとは何か、そしてGitOpsだけでは不十分な理由
多くの開発者は、インフラ全体をコードで定義し(IaC)、ArgoCDやFluxを通じてデプロイしていれば、バックアップは不要だと信じています。これは危険な誤解です。Gitはマニフェストを保存しますが、Persistent Volume(PV)の状態、動的に発行された証明書、リポジトリに入らなかったシークレットについては何も知りません。
Veleroは2つのことを行います:Kubernetes APIオブジェクト(デプロイメント、ConfigMap、シークレットなど)を保存し、ディスクのスナップショットを取得してデータをバックアップします。AWS、GCP、Azureなどのパブリッククラウドだけでなく、ベアメタルでのオンプレミスデータセンターでも動作します。
Veleroが命を救う3つのシナリオ
Veleroは単なる障害保護だけでなく、さまざまな場面で使用されています。主なユースケースは次のとおりです:
- 古典的なディザスターリカバリー。これは明白です:クラスタが停止したら、新しいクラスタを起動し、1つのコマンドでS3ストレージからすべてを復元します。
- クラウド間の移行。AWSからGoogle Cloudへ、またはあるリージョンから別のリージョンへの移行が簡単なタスクになります。Veleroはリソースをパッケージ化して新しい場所にデプロイします。
- 環境のクローン作成。テスト用に本番の正確なコピーを素早く作成する必要がありますか?本番のバックアップを作成し、名前空間
stagingに復元します。データベースのデータは、1ヶ月前のダンプではなく、最新のものになります。
内部動作の仕組み
プロジェクトのアーキテクチャは非常に透明です。クラスタ内でオペレーターとして動作するサーバーコンポーネントと、プロセスを管理するためのCLIクライアントがあります。
バックアップをトリガーすると、次のような処理が行われます:
- クライアントがVelero APIにリクエストを送信します。
- Backup controllerが指定したすべてのオブジェクトを見つけます(ラベルや名前空間でフィルタリングできます)。
- VeleroはKubernetes APIにリクエストを送信して、リソースのJSON記述を収集します。
- 並行して、ディスク管理用のプラグイン(AWSのEBSやCSIドライバーなど)が呼び出され、データのスナップショットが作成されます。
- これらすべてがアーカイブされ、オブジェクトストレージ(S3互換)に送信されます。
ちなみに、VeleroはResticとKopiaをサポートしています。つまり、クラウドスナップショットが利用できない場所でも、増分ファイルシステムバックアップを行うことができます。
実践的な例
名前空間app-productionにあるアプリケーション全体をバックアップする必要があるとしましょう。ターミナルコマンドは次のようになります:
velero backup create production-backup --include-namespaces app-production
そして、1週間後に誰かが誤ってその名前空間を削除した場合、復旧はわずか数分で完了します:
velero restore create --from-backup production-backup
興味深いことに、Veleroは復元中にリソースパラメータをその場で変更できます。たとえば、新しいクラスタに古いStorageClassがない場合、ディスクのStorageClassを変更できます。
互換性のニュアンス
Veleroの開発者はかなり厳格な互換性マトリックスを維持しています。現在、バージョン1.18は最新のKubernetesリリース(1.35まで)に対してテストされています。これは重要です。Kubernetes APIは急速に変化しており、古いツールはクラスタがアップグレードされると頻繁に動作しなくなります。
このプロジェクトはCloud Native Computing Foundation(CNCF)の傘下にあり、特定の保証を提供します:明日消えることはなく、セキュリティが監視されています。
導入する価値はあるか
本番環境でKubernetesを実行しており、ディスク上にデータ(データベース、キュー、設定ストアなど)がある場合、Veleroは必須です。
特に恩恵を受ける人々:
- 夜も安心して眠りたいSREエンジニア。
- クラスタ間を頻繁に移行するチーム。
- 複雑なバグをデバッグするために新鮮な本番データが必要な開発者。
公式ドキュメント(velero.io)から始めるのが良いでしょう。非常に詳細ですが、時折圧倒される感じるかもしれません。覚えておくべき最も重要なことは、バックアップは少なくとも1回は正常に復元に成功した時点で初めて存在することです реальными данными信頼する前に、テストクラスタで試してみてください。
関連プロジェクト