kopiaの挙動についての調査
Veleroを使ってk8sをCloudflare R2にバックアップしている。
k8sシステムのバックアップは、backups/
フォルダ内に日付フォルダが作成されて保存される。
私はバックアップを10日分と設定しており、それより前のフォルダはVeleroが勝手に消してくれる。
PVのバックアップにはVelero内部でkopiaが使われていて、差分バックアップしているらしい。
このバックアップのサイズが日に日に増えていっている。 Velero本体側は古いファイルは確実に消されているが、kopia側は内部がよくわかんない。 その原因を調査すべく、我々はアマゾンの奥地へと向かった。
まず、S3 Browser(https://s3browser.com/)を使用してバックアップサイズを確認する。 PV以外が原因の可能性もあるため(kopiaが原因でない可能性もあるため)、念のため
backups/
31.63 MB (33 166 071 bytes)
kopia/
730.84 MB (766 345 759 bytes)
この時点でkopiaが原因であることは確定だが、もう少し深堀してみる。 Veleroは、namespaceごとにkopiaのバックアップリポジトリを作るらしい。 リポジトリごとのサイズを見てみよう。
kopia/kube-system/
960.84 KB (983 897 bytes)
kopia/default/
149.79 MB (157 062 963 bytes)
kopia/commafeed-k8s/
580.12 MB (608 298 899 bytes)
commafeed-k8sのサイズが大きいので、原因が簡単にわからないか見てみよう。
まず、以下のコマンドでkopiaでリポジトリに接続する。
$ kopia repository connect s3 --bucket=velero-backup \
--access-key=MY_ACCESSS_KEY \
--secret-access-key=MY_SECRET_ACCESSS_KEY \
--endpoint=my_endpoint.r2.cloudflarestorage.com \
--prefix=kopia/commafeed-k8s/
そして、snapshotのリストを表示する。
$ kopia snapshot list --all
default@default:/host_pods/foo/volumes/kubernetes.io~local-volume/pvc-bar-nyaa
2025-05-12 02:35:17 JST k6f79df05e3cd1242b514a80adc1f11bf 70.5 MB drwx------ files:1336 dirs:28 (latest-10,hourly-10,daily-10) pins:velero-pin
2025-05-13 02:35:10 JST k837559efe6403b371530c6a038d47b22 70.5 MB drwx------ files:1336 dirs:28 (latest-9,hourly-9,daily-9) pins:velero-pin
2025-05-14 02:35:11 JST k79d0aa19c303cb2e1a227bec0dc9519d 70.6 MB drwx------ files:1336 dirs:28 (latest-8,hourly-8,daily-8) pins:velero-pin
2025-05-15 02:35:20 JST kbb7bc1a9e87182189b836f0b626b30af 70.4 MB drwx------ files:1336 dirs:28 (latest-7,hourly-7,daily-7) pins:velero-pin
2025-05-16 02:35:14 JST k2265b8cce26cb1fab1ba12b598393b3d 70.4 MB drwx------ files:1336 dirs:28 (latest-6,hourly-6,daily-6) pins:velero-pin
2025-05-17 02:35:15 JST k327ec74b8609b673bdaa628394eb4537 70.5 MB drwx------ files:1336 dirs:28 (latest-5,hourly-5,daily-5) pins:velero-pin
2025-05-18 02:35:18 JST k2f93e29f227989c1fc5d6b1f69bf49c0 70.5 MB drwx------ files:1336 dirs:28 (latest-4,hourly-4,daily-4,weekly-2) pins:velero-pin
2025-05-19 02:35:17 JST k30cd6001a35d16a96447426fb0b5ebef 70.6 MB drwx------ files:1336 dirs:28 (latest-3,hourly-3,daily-3) pins:velero-pin
2025-05-20 02:35:22 JST k644b50d1fe038da9753eb9a0106d6406 70.6 MB drwx------ files:1336 dirs:28 (latest-2,hourly-2,daily-2) pins:velero-pin
2025-05-21 02:35:21 JST k89bcae275148047a196494cb2e4a590d 70.6 MB drwx------ files:1336 dirs:28 (latest-1,hourly-1,daily-1,weekly-1,monthly-1,annual-1) pins:velero-pin
見るに、実ファイル580.12 MBに対して、 バックアップは70MB x 10日分(700MB分)だと言っている。 実ファイルの方が少ないため、差分バックアップしていることも考慮すると、サイズは妥当。
とりあえず大丈夫そうなので、経過観察措置とする。 10日分の700MBまでは無罪ということで一旦調査完了。