LoginSignup
0
0

More than 1 year has passed since last update.

Velero+Restic Pluginで増分バックアップを検証する

Last updated at Posted at 2023-03-07

KubernetesのデファクトバックアップツールであるVeleroではRestic Pluginをサポートしている。公式ドキュメントのRestic PluginのページではemptyDirとかでなければ増分バックアップに対応していると記載がある。
増分バックアップが利用できれば、以下のような恩恵が受けられそうである。

  • ストレージ利用量が削減できる
  • S3(+互換ストレージ)への転送量が削減でき、お得になる

この記事は実際に増分バックアップが聞くかどうか検証した時のメモ。

なお、今回は以下の環境で検証したが、恐らくこれ以外の環境でも同様の検証結果を得られるとは思う。

  • K8s:vSphere with Tanzu (vSphere7u3)
  • S3互換ストレージ:MinIO
  • Velero:Tanzu Mission Controlで構築(構築済み)

準備

こんな感じのbusyboxのコンテナを利用するPodとPVCのManifestを作成してデプロイする。

cat << EOF > ./sample.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: testvelero0
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: pvpod
spec:
      volumes:
      - name: testvol0
        persistentVolumeClaim:
          claimName: testvelero0
      containers:
      - name: busybox
        image: busybox
        command: [ "sleep", "365d" ]
        volumeMounts:
        - name: testvol0
          mountPath: "/mnt0"
EOF
kubectl apply -f ./sample.yaml

検証

Podに入ってPVのmount先にランダムなデータを512MBほど作成する。

kubectl exec -it pvpod -- sh
head -c 512m /dev/urandom > /mnt0/testdata

作成後の状態はこんな感じ。

$ kubectl exec -it pvpod -- ls -lh /mnt0
total 512M
drwx------    2 root     root       16.0K Mar  1 10:01 lost+found
-rw-r--r--    1 root     root      512.0M Mar  7 04:33 testdata

この状態で、このPod、PVCがいるNamespaceに対してバックアップを取得する。

バックアップはTanzu Mission ControlのData Protection機能で取得したのでコマンド等は割愛する。

バックアップ後のMinIOのバケットの中身とサイズは以下のようになった。
1678174713307.png

mcコマンドでファイルの更新時刻を確認する。

$ mc ls mybucket/ -r | sed "s/\[\(.*\) JST\] .*/\1/g" | sort | uniq
2023-03-07 14:39:51
2023-03-07 14:39:56
:(省略)
2023-03-07 14:40:30
2023-03-07 14:40:31

14:39から14:40で採取できていることが確認できる。

念の為、リストア出来ることを確認する。
デプロイしていたNamespaceを削除し、TMCからリストアを実施する。
1678180265360.png

$ kubectl exec -it pvpod -- ls -lh /mnt0
Defaulted container "busybox" out of: busybox, restic-wait (init)
total 512M
drwx------    2 root     root       16.0K Mar  1 10:01 lost+found
-rw-r--r--    1 root     root      512.0M Mar  7 04:33 testdata

ここから差分を100MB程度作ってみる。先ほど作成したファイルに追記する。

kubectl exec -it pvpod -- sh
head -c 100m /dev/urandom >> /mnt0/testdata

以下のようになった。これをバックアップする。

$ kubectl exec -it pvpod -- ls -lh /mnt0
Defaulted container "busybox" out of: busybox, restic-wait (init)
total 612M
drwx------    2 root     root       16.0K Mar  1 10:01 lost+found
-rw-r--r--    1 root     root      612.0M Mar  7 09:11 testdata

問題なく取得できた。
1678180573067.png

ここでバケットの利用量を確認する。
1678180696492.png

増分バックアップが効かない場合、2回バックアップを取得したので 512MB + 612MB の計1124MB消費していそうだが、実際は612MBとなっており、増分バックアップが働いているように見える。

resticのディレクトリに絞ってファイルの更新を確認する。

$ mc ls pso-portal/ -r | grep restic | sed "s/\[\(.*\) JST\] .*/\1/g" | sort | uniq
2023-03-07 14:39:51
2023-03-07 14:39:56
:(省略)
2023-03-07 14:40:25
2023-03-07 18:13:23
2023-03-07 18:13:24
2023-03-07 18:13:25
2023-03-07 18:13:27
2023-03-07 18:13:28
2023-03-07 18:13:44

全てのファイルを更新せず、部分的に更新されていることが分かる。
更新されたファイルを抜き出す。

$ mc ls pso-portal/ -r  | grep restic |grep 18:13
[2023-03-07 18:13:27 JST]  15KiB STANDARD velero-bucket/01GTAPF9B9RQ8BR2FDTYKAKVR0/restic/pvc-test/data/00/00ef0c7dbc38ef3a98274e7dcd6185907cd7b70a20c3b33f92da90067651bc6d
[2023-03-07 18:13:23 JST]  18MiB STANDARD velero-bucket/01GTAPF9B9RQ8BR2FDTYKAKVR0/restic/pvc-test/data/65/65324e612bac440981ebc7066519d50e4aacf242f8cfb61a4cc210eab444b3ef
[2023-03-07 18:13:28 JST]  14MiB STANDARD velero-bucket/01GTAPF9B9RQ8BR2FDTYKAKVR0/restic/pvc-test/data/76/760d195084b82fc803e189296c88025591221022b3bbf6fcfa4be1c0fb19c7b0
[2023-03-07 18:13:25 JST]  16MiB STANDARD velero-bucket/01GTAPF9B9RQ8BR2FDTYKAKVR0/restic/pvc-test/data/81/8107fbcc4cc299754e2aed1d910021280d9dbe176e9d5c87a932307fd49eddb1
[2023-03-07 18:13:25 JST]  18MiB STANDARD velero-bucket/01GTAPF9B9RQ8BR2FDTYKAKVR0/restic/pvc-test/data/af/af5f6cda20277ee7c084337e154e0fc4ded379e1a315aed56d6ef7f433ba24aa
[2023-03-07 18:13:24 JST]  17MiB STANDARD velero-bucket/01GTAPF9B9RQ8BR2FDTYKAKVR0/restic/pvc-test/data/b9/b912af442b68e2be9e86042d73c1031f7a1a2a26df9cfbc8ad3572e947bf65cb
[2023-03-07 18:13:25 JST]  17MiB STANDARD velero-bucket/01GTAPF9B9RQ8BR2FDTYKAKVR0/restic/pvc-test/data/df/dff19f3d7fc61fded576c657f7cea947b582b2a62baf79bc3417ac1cf07eee30
[2023-03-07 18:13:44 JST] 3.8KiB STANDARD velero-bucket/01GTAPF9B9RQ8BR2FDTYKAKVR0/restic/pvc-test/index/1f523e690cf205243f18249c119561fced738250c7b9ce83e961d92bdbd279a8
[2023-03-07 18:13:44 JST]   355B STANDARD velero-bucket/01GTAPF9B9RQ8BR2FDTYKAKVR0/restic/pvc-test/snapshots/c4b819d5c3fc9cec398ecf43738910c09c282f76689797931ee57cdbac2aa1ac

上記から以下が分かる。

  • 変更があった(追加された)ファイルの合計は100MB
  • data以外のディレクトリとしてはindexとsnapshots以下のファイルが更新される
  • data以外の更新量は微々たるもの

以上より、以下が言えそうだ。

  • VeleroでResticを使ってバックアップした場合、増分バックアップが自動で有効となる
  • 増分しか更新しないため、ストレージの節約やS3への転送量削減が見込める

なお、転送量を正確に測っていないため、本当に転送量が減るかは実環境で利用する際は確認して利用した方がよい。
また、注意点としてPluginによって増分バックアップに対応していないことがある(例えばVelero Plugin for vSphereは増分バックアップに対応していない)。Restic以外のPluginを使う場合はその点を念頭において利用する必要がある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0