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

Velero基本介紹

官方文檔://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://velero.io/docs/v1.4/supported-providers/

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

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

安裝Velero Client

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

官方提供了多種安裝方式://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

推薦用這個安裝://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=//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=//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=//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

暫時解決://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)