Velero実践:クラスターリソースのリストア

Japanese title slide reading 'Velo実践:クラスターリリースのリストア' on a pale background with blue/green geometric shapes

はじめに

前回は、PersistentVolume(PV)を伴わないステートレスなアプリケーションを対象として、Veleroを用いたクラスターリソースのバックアップ手順について解説しました。

本記事では、前回取得したバックアップデータを利用して、クラスター内にリソースを復元(リストア)する手順について深掘りしていきます。 なお、PVを含んだステートフルなデータのバックアップやリストア等の取り扱いについては、次回以降の記事で詳しくご紹介する予定です。

前提条件

本手順では、前回の記事で作成した環境およびバックアップが存在することを前提として進めていきます。

リストアの事前確認

バックアップの確認

リストアする前に、前回作成したバックアップを確認します。

$ velero backup get

# 出力例
NAME                                  STATUS            ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION                  SELECTOR
demo-resource-backup                  Completed         0        12         2026-08-04 01:38:15 +0000 UTC   27d       default-backup-storage-location   <none>

リソースの削除

Veleroは既存のリソースが存在する場合、デフォルトでリストアをスキップする仕様になっています。

そのため、今回はリストアが正常に行われることを確認すべく、あえて既存のリソースを削除した上でリストアを実行します。

$ kubectl delete ns demo

# 出力例
namespace "demo" deleted
$ kubectl get all -n demo

# 出力例
No resources found in demo namespace.

リストアの基本的な流れ

リストアの実行

前回作成したバックアップを指定してリストアを実行します。

$ velero restore create demo-resource-restore --from-backup demo-resource-backup

# 出力例
Restore request "demo-resource-restore" submitted successfully.
Run `velero restore describe demo-resource-restore` or `velero restore logs demo-resource-restore` for more details.

コマンドを実行すると、「Restore request “demo-resource-restore” submitted successfully.」と表示され、リストア処理がバックグラウンドで開始されます。

状態の確認

リストアが正常に完了したか確認するには velero restore describe コマンドを使用します。出力結果の Phase が Completed になっていれば成功です。

$ velero restore describe demo-resource-restore

# 出力例
Name:         demo-resource-restore
Namespace:    velero
Labels:       <none>
Annotations:  <none>

Phase:                       Completed
...

詳細なログを確認したい場合は、以下のコマンドを実行します。ログの詳細は省略します。

$ velero restore logs demo-resource-restore

リストア後の確認

リソースの確認

リストア後に、削除する前のリソースの種類と同じリソースが作成されているか確認します。 一部リソース(Pod や ReplicaSet等)のsuffix(856dc6c76b-9jbtfの部分)はリストア後に変わることがあります。

$ kubectl get all -n demo

# 出力例
NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-856dc6c76b-9jbtf   1/1     Running   0          13s

NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/nginx-service   ClusterIP   10.43.179.216   <none>        80/TCP    13s

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   1/1     1            1           13s

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-856dc6c76b   1         1         1       13s

動作確認

動作確認のため、テスト用 Pod を一時的に起動して nginx-service へ HTTP リクエストを送信します。

$ kubectl run -n demo test-curl --rm -i --restart=Never --image=curlimages/curl -- http://nginx-service

# 出力例
<html>
<head><title>Velero Demo</title></head>
<body>
<h1>Hello, Velero!</h1>
<p>This is a cluster resource backup demo.</p>
</body>
</html>
pod "test-curl" deleted

リストア時のリソース変換

Namespace mapping

–namespace-mappings オプションを使用すると、リストア時にリソースの展開先を別のNamespaceへ変更できます。

$ velero restore create demo-resource-restore-2 \
  --from-backup demo-resource-backup \
  --namespace-mappings demo:demo-2

# 出力例
Restore request "demo-resource-restore-2" submitted successfully.
Run `velero restore describe demo-resource-restore-2` or `velero restore logs demo-resource-restore-2` for more details.

リストア完了後、マッピング先の Namespace(demo-2)を確認すると、対象のリソースが正常に作成されていることが分かります。

$ kubectl get all -n demo-2

# 出力例
NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-856dc6c76b-9jbtf   1/1     Running   0          5s

NAME                    TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/nginx-service   ClusterIP   10.43.188.0   <none>        80/TCP    5s

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   1/1     1            1           5s

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-856dc6c76b   1         1         1       5s

まとめ

本記事では、PersistentVolume を含まないクラスターリソースを Velero を利用してリストアする方法を解説しました。

  • velero restore create でバックアップのリストアが可能
  • リストア時にバックアップ時のNamespaceと異なるNamespaceにマッピングすることが可能

本記事が、基本的な Velero の使い方の理解に少しでもお役に立てば幸いです。次回以降もぜひご覧ください。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。
エンジニア募集中!

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です