Kubernetesのバックアップ(Velero)【Kubernetes入門】

バックアップ体制

Kubernetesは宣言的なIaCです。 これに乗っ取れば、すべてのKuberentesリソースを記述するデータは、kubernetes保有するデータベースetcdに保存されます。 このetcdを絶対的に正とする運用により、Kubernetes内の一部のDeploymentsをあなたが削除しても、etcdの情報から再びDeploymentsが自動作成されます。

しかしそれでも、Kubernetesにはバックアップが必要です。 例えばデータベースのレプリケーションをサポートしたとしても、AWSコンソールから誤って「削除」を押しただけで事故が起きてしまいます。

Velero

Veleroはオープンソースソフトウェアで、クラスタの状態と永続データをバックアップし復元できます。 Veleroは、データの損失や災害復旧の際にクラスターを以前の状態に戻すために、クラスターのリソース、ボリューム、設定などのスナップショットを取り、それらをリモート場所に保存する機能を提供します。

Veleroを導入する

BackupStorageLocation(バックアップストレージロケーション)は、Veleroの一部で、バックアップデータを保存する場所を指定するための概念です。

以下の設定により、バックアップをawsのs3のsample-strageに保存しています。

apiVersion: velero.io/v1
kind: BackupStorageLocation
metadata:
  name: aws-s3
  namespace: velero
spec:
  provider: aws
  objectStorage:
    bucket: sample-strage
  config:
    region: your-aws-region

Veleroの永続ボリュームのバックアップ

VolumeSnapshotLocationを使用することで永続ボリュームのバックアップも作成することが出来ます。

apiVersion: velero.io/v1
kind: VolumeSnapshotLocation
metadata:
  name: aws-snapshot-location
  namespace: velero
spec:
  provider: aws
  config:
    region: your-aws-region

Veleroによるバックアップの作成

velero backupコマンドを使うことで、バックアップを作成することが出来ます。 VeleroサーバーはKubernetes APIに対してクエリを実行し、ユーザが指定したセレクタに一致するリソースでバックアップを作成します。

velero backup create <バックアップ名>

クラウドでVeleroでバックアップを作成した場合、S3にファイルを保存します。

Veleroにバックアップの取得

Veleroで作成したバックアップの一覧を取得するには、getコマンドを使用します。

velero backup get

Veleroにてデータの復元

Veleroでのバックアップの復元には、downloadコマンドを使用します。

velero backup download <バックアップ名>

ダウンロードされるファイルはtar.gz形式のアーカイブなので、通常のファイルのように解凍できます。

バックアップのスケジューリング

バックアップとはスケジューリングとセットになります。

Veleroにおいてはそのバックアップスケジュールも組み込まれており、createコマンドのオプションにクーロン形式で指定することが可能です。

velero schedule create daily-backup --schedule="0 0 * * *"

上記のコマンドは毎日午前0時にバックアップが作成されます。