はじめに
前回は、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 の使い方の理解に少しでもお役に立てば幸いです。次回以降もぜひご覧ください。

