Velero:備份、遷移Kubernetes集群資源和PV
- 2022 年 2 月 8 日
- 筆記
- Kubernetes, 學習筆記, 工具使用
Velero基本介紹
官方文檔://velero.io/docs/v1.4/
基本工作原理:
不管需求是實現什麼,比如:集群遷移、恢復、備份,其核心都是通過velero client CLI創建一個backup,然後遷移和恢復等操作都是需要這個backup來完成的。
創建一個backup,velero backup create test-backup
:
- Velero client 調用Kubernetes API伺服器以創建Backup。
- BackupController檢測到新的backup,並驗證。
- BackupController開始backup,通過請求ApiServer獲取資源來收集數據以進行備份。
- BackupController將要備份的數據上傳到一個對象存儲伺服器,如AMS S3。
- 默認情況下,
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
--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客戶端
推薦用這個安裝://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
刪除安裝的:
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)