スタンドアローンの Velero と Restic を使用して、TKG クラスタで実行されているワークロードをバックアップおよびリストアできます。これは Velero Plugin for vSphere を使用する代わりの方法です。スタンドアローンの Velero は、主に移植性が必要な場合に利用します。ステートフル ワークロードには、Restic が必要です。
前提条件
スタンドアローンの Velero と Restic を使用して TKG クラスタでワークロードをバックアップおよびリストアするには、ターゲット クラスタにスタンドアローン バージョンの Velero と Restic をインストールする必要があります。リストアを別のターゲット クラスタで実行する場合は、ターゲット クラスタにも Velero と Restic をインストールする必要があります。TKG クラスタへのスタンドアローン Velero と Restic のインストールと構成を参照してください。
TKG クラスタで実行されているステートレス アプリケーションのバックアップ
TKG クラスタで実行されているステートレス アプリケーションをバックアップするには、Velero を使用する必要があります。
--include namespaces
タグを使用して、そのサンプル ステートレス アプリケーションをバックアップおよびリストアする方法を示します。
velero backup create example-backup --include-namespaces example-backup
Backup request "example-backup" submitted successfully. Run `velero backup describe example-backup` or `velero backup logs example-backup` for more details.
velero backup get
velero backup describe example-backup
MinIO サーバなどの S3 互換オブジェクト ストアの Velero バケットを確認します。
kubectl get crd
kubectl get backups.velero.io -n velero
kubectl describe backups.velero.io guestbook-backup -n velero
TKG クラスタで実行されているステートレス アプリケーションのリストア
TKG クラスタで実行されているステートレス アプリケーションをリストアするには、Velero を使用する必要があります。
サンプル アプリケーションのリストアをテストするために、サンプル アプリケーションを削除します。
kubectl delete ns guestbook namespace "guestbook" deleted
velero restore create --from-backup example-backup
Restore request "example-backup-20200721145620" submitted successfully. Run `velero restore describe example-backup-20200721145620` or `velero restore logs example-backup-20200721145620` for more details.
velero restore describe example-backup-20200721145620
velero restore get
kubectl get ns
kubectl get pod -n example
kubectl get svc -n example
TKG クラスタで実行されているステートフル アプリケーションのバックアップ
TKG クラスタで実行されているステートフル アプリケーションをバックアップする場合は、保存されているアプリケーション メタデータとアプリケーション データの両方をパーシステント ボリュームにバックアップする必要があります。これを行うには、Velero と Restic の両方が必要です。
この例では、Guestbook アプリケーションを使用します。Guestbook アプリケーションは、TKG クラスタにデプロイされているものと想定します。TKG クラスタへの Guestbook アプリケーションのデプロイを参照してください。
ステートフルなバックアップとリストアを説明するために、フロントエンド Web ページを使用してメッセージを Guestbook アプリケーションに送信し、そのメッセージが保存されるようにしてみましょう。例:
--include namespace
タグやポッドの注釈を使用して、Guestbook アプリケーションをバックアップおよびリストアする方法を示します。
--default-volumes-to-restic
オプションを使用してください。これにより、すべての PV が Restic を使用して自動的にバックアップされます。詳細については
https://velero.io/docs/v1.5/restic/を参照してください。
kubectl get pod -n guestbook
kubectl get pod -n guestbook NAME READY STATUS RESTARTS AGE guestbook-frontend-deployment-85595f5bf9-h8cff 1/1 Running 0 55m guestbook-frontend-deployment-85595f5bf9-lw6tg 1/1 Running 0 55m guestbook-frontend-deployment-85595f5bf9-wpqc8 1/1 Running 0 55m redis-leader-deployment-64fb8775bf-kbs6s 1/1 Running 0 55m redis-follower-deployment-84cd76b975-jrn8v 1/1 Running 0 55m redis-follower-deployment-69df9b5688-zml4f 1/1 Running 0 55m
パーシステント ボリュームが Redis ポッドに接続されます。これらのステートフル ポッドは、Restic を使用してバックアップします。このため、volumeMount
の名前を使用して、ステートフル ポッドに注釈を追加する必要があります。
volumeMount
を知る必要があります。
mountName
を取得するには、次のコマンドを実行します。
kubectl describe pod redis-leader-deployment-64fb8775bf-kbs6s -n guestbook
結果には、redis-leader-data
からの Containers.leader.Mounts: /data
が表示されます。この最後のトークンが、リーダー ポッドの注釈に使用する volumeMount
名です。フォロワーの場合は、redis-follower-data
になります。volumeMount
名は、ソース YAML から取得することもできます。
kubectl -n guestbook annotate pod redis-leader-64fb8775bf-kbs6s backup.velero.io/backup-volumes=redis-leader-data
pod/redis-leader-64fb8775bf-kbs6s annotated
kubectl -n guestbook describe pod redis-leader-64fb8775bf-kbs6s | grep Annotations Annotations: backup.velero.io/backup-volumes: redis-leader-data
kubectl -n guestbook describe pod redis-follower-779b6d8f79-5dphr | grep Annotations Annotations: backup.velero.io/backup-volumes: redis-follower-data
velero backup create guestbook-backup --include-namespaces guestbook
Backup request "guestbook-backup" submitted successfully. Run `velero backup describe guestbook-pv-backup` or `velero backup logs guestbook-pv-backup` for more details.
velero backup get NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR guestbook-backup Completed 0 0 2020-07-23 16:13:46 -0700 PDT 29d default <none>
velero backup describe guestbook-backup --details
kubectl get backups.velero.io -n velero NAME AGE guestbook-backup 4m58s
kubectl describe backups.velero.io guestbook-backup -n velero
TKG 2.0 クラスタで実行されているステートフル アプリケーションのリストア
TKG クラスタで実行されるステートフル アプリケーションをリストアする場合は、保存されているアプリケーション メタデータとアプリケーション データの両方をパーシステント ボリュームにリストアする必要があります。これを行うには、Velero と Restic の両方が必要です。
この例では、前のセクションの説明に従ってステートフル Guestbook アプリケーションをバックアップしたものと想定しています。
kubectl delete ns guestbook namespace "guestbook" deleted
kubectl get ns kubectl get pvc,pv --all-namespaces
velero restore create --from-backup <velero-backup-name>
velero restore create --from-backup guestbook-backup
Restore request "guestbook-backup-20200723161841" submitted successfully. Run `velero restore describe guestbook-backup-20200723161841` or `velero restore logs guestbook-backup-20200723161841` for more details.
velero restore describe guestbook-backup-20200723161841 Name: guestbook-backup-20200723161841 Namespace: velero Labels: <none> Annotations: <none> Phase: Completed Backup: guestbook-backup Namespaces: Included: all namespaces found in the backup Excluded: <none> Resources: Included: * Excluded: nodes, events, events.events.k8s.io, backups.velero.io, restores.velero.io, resticrepositories.velero.io Cluster-scoped: auto Namespace mappings: <none> Label selector: <none> Restore PVs: auto Restic Restores (specify --details for more information): Completed: 3
velero restore get NAME BACKUP STATUS ERRORS WARNINGS CREATED SELECTOR guestbook-backup-20200723161841 guestbook-backup Completed 0 0 2021-08-11 16:18:41 -0700 PDT <none>
kubectl get ns NAME STATUS AGE default Active 16d guestbook Active 76s ... velero Active 2d2h
vkubectl get all -n guestbook NAME READY STATUS RESTARTS AGE pod/frontend-6cb7f8bd65-h2pnb 1/1 Running 0 6m27s pod/frontend-6cb7f8bd65-kwlpr 1/1 Running 0 6m27s pod/frontend-6cb7f8bd65-snwl4 1/1 Running 0 6m27s pod/redis-leader-64fb8775bf-kbs6s 1/1 Running 0 6m28s pod/redis-follower-779b6d8f79-5dphr 1/1 Running 0 6m28s pod/redis-follower-899c7e2z65-8apnk 1/1 Running 0 6m28s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/guestbook-frontend LoadBalancer 10.10.89.59 10.19.15.99 80:31513/TCP 65s service/redis-follower ClusterIP 10.111.163.189 <none> 6379/TCP 65s service/redis-leader ClusterIP 10.111.70.189 <none> 6379/TCP 65s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/guestbook-frontend-deployment 3/3 3 3 65s deployment.apps/redis-follower-deployment 1/2 2 1 65s deployment.apps/redis-leader-deployment 1/1 1 1 65s NAME DESIRED CURRENT READY AGE replicaset.apps/guestbook-frontend-deployment-56fc5b6b47 3 3 3 65s replicaset.apps/redis-follower-deployment-6fc9cf5759 2 2 1 65s replicaset.apps/redis-leader-deployment-7d89bbdbcf 1 1 1 65s
kubectl get pvc,pv -n guestbook NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/redis-leader-claim Bound pvc-a2f6e6d4-42db-4fb8-a198-5379a2552509 2Gi RWO thin-disk 2m40s persistentvolumeclaim/redis-follower-claim Bound pvc-55591938-921f-452a-b418-2cc680c0560b 2Gi RWO thin-disk 2m40s NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/pvc-55591938-921f-452a-b418-2cc680c0560b 2Gi RWO Delete Bound guestbook/redis-follower-claim thin-disk 2m40s persistentvolume/pvc-a2f6e6d4-42db-4fb8-a198-5379a2552509 2Gi RWO Delete Bound guestbook/redis-leader-claim thin-disk 2m40s
最後に、guestbook-frontend サービスの外部 IP アドレスを使用して Guestbook フロントエンドにアクセスし、チュートリアルの最初に送信したメッセージがリストアされたことを確認します。例: