可以使用獨立 Velero 和 Restic 備份和還原在 TKG 叢集上執行的工作負載。此方法是使用 適用於 vSphere 的 Velero 外掛程式 的替代方法。使用獨立 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

檢查與 S3 相容的物件存放區 (例如 MinIO 伺服器) 上的 Velero 值區。

Velero 會在 Kubernetes 自訂資源定義 (CRD) 中寫入某些中繼資料。
kubectl get crd
Velero 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 應用程式

為了示範可設定狀態的備份和還原,請使用前端網頁將一些訊息提交至 Guestbook 應用程式,以便保留這些訊息。例如:

提交的訊息將顯示在要保留的訊息清單中。

此範例顯示如何使用 --include namespace 標籤和網繭註解來備份和還原 Guestbook 應用程式。
備註: 此範例使用的是註解。但是,Velero 1.5 版及更新版本不再需要註解。如果不使用註解,您可以在建立備份時使用 --default-volumes-to-restic 選項。這將使用 Restic 自動備份所有 PV。如需詳細資訊,請參閱 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-dataContainers.leader.Mounts: /data。最後一個 Token 是要用於主節點網繭註解的 volumeMount 名稱。對於從屬節點,它將為 redis-follower-data。此外,還可以從來源 YAML 取得 volumeMount 名稱。

為每個 Redis 網繭加上註解,例如:
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 備份:
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
請注意,Velero 可讓您執行其他命令,例如:
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.
確認可設定狀態的 Guestbook 應用程式已還原:
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 前端,並確認您在本教學課程開始時提交的訊息是否已還原。例如:

還原的訊息清單。