Velero:備份、遷移Kubernetes叢集資源和PV

Hang,發表於2022-02-08

Velero基本介紹

官方文件:https://velero.io/docs/v1.4/

基本工作原理:

不管需求是實現什麼,比如:叢集遷移、恢復、備份,其核心都是通過velero client CLI建立一個backup,然後遷移和恢復等操作都是需要這個backup來完成的。

建立一個backup,velero backup create test-backup

image-20200720160432164

  1. Velero client 呼叫Kubernetes API伺服器以建立Backup。
  2. BackupController檢測到新的backup,並驗證。
  3. BackupController開始backup,通過請求ApiServer獲取資源來收集資料以進行備份。
  4. BackupController將要備份的資料上傳到一個物件儲存伺服器,如AMS S3。
  5. 預設情況下,velero backup create會生產每一個PV的磁碟快照。您可以通過指定其他引數來調整快照。執行velero backup create --help以檢視可用的引數。可以使用選項禁用快照--snapshot-volumes=false

安裝需要的工具

安裝物件儲存伺服器:Minio

Velero支援的storage providers:https://velero.io/docs/v1.4/supported-providers/

這裡使用本地安裝的物件儲存伺服器,Minio

安裝的Minio需要能被兩個叢集(叢集遷移,一個到另外一個),都能訪問到。

安裝Velero Client

Velero Client就是命令列工具,安裝版本應該是v1.3.0, or later。

官方提供了多種安裝方式:https://velero.io/docs/master/basic-install/

安裝Velero Server

使用Velero

首先需要明確一點是:不管需求是什麼,比如:叢集遷移、恢復、備份,其核心都是通過backup實現的。災難恢復是如果出現意外,那麼從備份的backup恢復這個叢集,而遷移的過程是使用當前叢集的backup來在另外一個叢集恢復。

Velero常用命令

備份Backup

velero backup get :檢視已備份的

velero backup create <backupname>:建立一個backup包含所有資源

velero backup create <backupname> --include-namespaces ns1,ns2:為ns1,ns2名稱空間下的資源備份

velero backup create <backupname> --exclude-namespaces ns1,ns2:排除掉ns1,ns2的名稱空間,建立備份

velero backup create <backupname> --include-resources resource1,resource2:為指定資源備份

`velero backup create --exclude-resources resource1,resource2``:不備份指定資源

--storage-location <localpath>:將建立的備份儲存到本地路徑下

-l, --selector:通過指定label來匹配要back up的資源

除此以外還包括:delete、describe、logs

恢復Restore

velero restore get:檢視已經restore的資源

vel ero restore create restore-1 --from-backup backup-1:從backup-1恢復

velero restore create --from-backup backup-2 --include-resources persistentvolumeclaims,persistentvolumes:僅恢復指定資源,同樣使用--exclude-resources:不恢復某資源

velero restore create --from-schedule schedule-1:從建立的schedule恢復

除此以外還包括:delete、describe、logs

Schedule定時備份

Schedule是針對backup的,是獨立於backup之外的一種資源,但他本身也是一個backup只不過是具有了定時的功能,符合Cron規則。

velero create schedule NAME --schedule="0 */6 * * *":每6小時自動備份一次

velero create schedule NAME --schedule="@every 24h" --include-namespaces web:因為schedule也是一種backup,所以建立backup指定的引數這裡也都可以使用

除此以外還包括:delete、describe、logs

介紹:

Velero 可以幫助你:

  • 對叢集進行備份並在丟失的情況下進行恢復。
  • 將叢集資源遷移到其他叢集。
  • 將生產叢集複製到開發和測試叢集。

Velero 包括:

  • 在叢集上執行的服務端
  • 本地的CLI客戶端

image-20200720093619214

推薦用這個安裝:https://velero.io/docs/master/contributions/minio/

Velero v1.4.0下面兩線之間是過程,結論是 兩個叢集裡安裝下面這個,參考的上面的這個url:

velero install  \
--provider aws  \
--plugins velero/velero-plugin-for-aws:v1.0.0 \
--kubeconfig /etc/rancher/k3s/k3s.yaml \
--bucket velero \
--secret-file ./credentials-velero  \
--use-volume-snapshots=false  \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.lab3.cn \
--use-restic \
--wait\

執行安裝命令:

velero install \
--image registry.cn-hangzhou.aliyuncs.com/acs/velero:latest  \
--provider aws \
--bucket velero \
--namespace velero \
--secret-file ./credentials-velero \
--velero-pod-cpu-request 200m \
--velero-pod-mem-request 200Mi \
--velero-pod-cpu-limit 200m \
--velero-pod-mem-limit 200Mi \
--use-volume-snapshots=false \
--use-restic \
--restic-pod-cpu-request 200m \
--restic-pod-mem-request 200Mi \
--restic-pod-cpu-limit 200m \
--restic-pod-mem-limit 200Mi \
--backup-location-config region=minio,s3ForcePathStyle="false",s3Url=http://127.0.0.1:30464

出現錯誤:

An error occurred: --plugins flag is required

需要新增一個外掛:

velero plugin add velero/velero-plugin-for-aws:v1.0.0
  • An error occurred: deployments.apps "velero" not found
    

嘗試下面這個 ok:

velero install \
--plugins velero/velero-plugin-for-aws:v1.0.0 \
--image registry.cn-hangzhou.aliyuncs.com/acs/velero:latest  \
--provider aws \
--bucket velero \
--namespace velero \
--secret-file ./credentials-velero \
--velero-pod-cpu-request 200m \
--velero-pod-mem-request 200Mi \
--velero-pod-cpu-limit 200m \
--velero-pod-mem-limit 200Mi \
--use-volume-snapshots=false \
--use-restic \
--restic-pod-cpu-request 200m \
--restic-pod-mem-request 200Mi \
--restic-pod-cpu-limit 200m \
--restic-pod-mem-limit 200Mi \
--backup-location-config region=minio,s3ForcePathStyle="false",s3Url=http://127.0.0.1:30464

刪除安裝的:

image-20200720111512493

kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero

下一個出現的錯誤:

An error occurred: unknown flag: --feature

暫時解決:https://velero.io/docs/master/customize-installation/

用disable --feature來解決:

$ kubectl -n velero edit deploy/velero
$ kubectl -n velero edit daemonset/restic

下一個錯誤出現:

An error occurred: unable to register plugin (kind=VolumeSnapshotter, name=velero.io/aws, command=/plugins/velero-plugin-for-aws) because another plugin is already registered for this kind and name (command=/velero)

相關文章