>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Go

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. 古典的なディザスターリカバリー。これは明白です:クラスタが停止したら、新しいクラスタを起動し、1つのコマンドでS3ストレージからすべてを復元します。
  2. クラウド間の移行。AWSからGoogle Cloudへ、またはあるリージョンから別のリージョンへの移行が簡単なタスクになります。Veleroはリソースをパッケージ化して新しい場所にデプロイします。
  3. 環境のクローン作成。テスト用に本番の正確なコピーを素早く作成する必要がありますか?本番のバックアップを作成し、名前空間stagingに復元します。データベースのデータは、1ヶ月前のダンプではなく、最新のものになります。

内部動作の仕組み

プロジェクトのアーキテクチャは非常に透明です。クラスタ内でオペレーターとして動作するサーバーコンポーネントと、プロセスを管理するためのCLIクライアントがあります。

バックアップをトリガーすると、次のような処理が行われます:

  1. クライアントがVelero APIにリクエストを送信します。
  2. Backup controllerが指定したすべてのオブジェクトを見つけます(ラベルや名前空間でフィルタリングできます)。
  3. VeleroはKubernetes APIにリクエストを送信して、リソースのJSON記述を収集します。
  4. 並行して、ディスク管理用のプラグイン(AWSのEBSやCSIドライバーなど)が呼び出され、データのスナップショットが作成されます。
  5. これらすべてがアーカイブされ、オブジェクトストレージ(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回は正常に復元に成功した時点で初めて存在することです реальными данными信頼する前に、テストクラスタで試してみてください。

関連プロジェクト