可以使用獨立 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 值區。
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 應用程式。
為了示範可設定狀態的備份和還原,請使用前端網頁將一些訊息提交至 Guestbook 應用程式,以便保留這些訊息。例如:
--include namespace
標籤和網繭註解來備份和還原 Guestbook 應用程式。
--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-data
的 Containers.leader.Mounts: /data
。最後一個 Token 是要用於主節點網繭註解的 volumeMount
名稱。對於從屬節點,它將為 redis-follower-data
。此外,還可以從來源 YAML 取得 volumeMount
名稱。
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 前端,並確認您在本教學課程開始時提交的訊息是否已還原。例如: