1. Velero 簡介
Velero 是 heptio 團隊(被 VMWare 收購)開源的 Kubernetes 集群備份、遷移工具。
Velero 使用對象存儲保存集群資源。默認支持的對象存儲有 AWS、Azure、GCP ,兼容 S3 協議,也可以通過插件來擴展到其他平台,比如 Aliyun OSS。
目前,Velero 不具備版本管理功能,只能進行增量恢復,不會進行刪除或覆蓋操作。
2. Velero 工作原理
Velero 首先會在集群中創建各種 CRD 以及相關的控制器,通過對 CRD 對象的操作完成備份、恢復行為。Velero 的工作原理圖如下:
- Velero 客戶端調用 Kubernetes API 服務器創建 Backup 對象。
- BackupController 監聽 Backup 對象變化,以執行備份過程。
- 備份時,BackupController 通過 API Server 查詢相關數據。
- 備份后,BackupController 將數據上傳到對象存儲。
運維拓撲圖如下:
在所有集群上安裝 Velero,運維人員通過 Velero Client 給 Velero Server 發送備份、恢復請求。Velero Server 推拉指定的 Kubernetes 對象的數據。這些數據以 Json 格式壓縮存儲在對象存儲服務中。
下圖是備份數據的目錄結構:
3. 安裝 Velero
3.1 下載文件
二進制文件下載地址:Github。
這里以 CentOS 操作系統、Velero 1.6.0 為例:
下載二進制文件,然后復制到 /user/local/bin
目錄下。
1、下載壓縮包並解壓
wget https://github.com/vmware-tanzu/velero/releases/download/v1.6.0/velero-v1.6.0-linux-amd64.tar.gz tar -zxvf velero-v1.6.0-linux-amd64.tar.gz && cd velero-v1.6.0-linux-amd64/
2、查看目錄結構
[root@m-master126 velero-v1.6.0-linux-amd64]# tree . ├── examples │ ├── minio │ │ └── 00-minio-deployment.yaml │ ├── nginx-app │ │ ├── base.yaml │ │ ├── README.md │ │ └── with-pv.yaml │ └── README.md ├── LICENSE └── velero 3 directories, 7 files
3.2 配置對象存儲服務
考慮到可能沒有直接可用的對象存儲服務,本文使用 Velero 提供的 minio 搭建一個對象存儲服務。如果是公有雲服務,這里部署 minio 的步驟可以省略,只需要創建 credentials-velero 文件。
1、創建 minio 服務
- 設置為 NodePort 類型
sed -i "/type: /s#ClusterIP#NodePort#" examples/minio/00-minio-deployment.yaml
- 創建 minio 服務
kubectl apply -f examples/minio/00-minio-deployment.yaml
- 查看 service 訪問端口
[root@m-master126 velero-v1.6.0-linux-amd64]# kubectl get svc -n velero NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE minio NodePort 10.233.11.92 <none> 9000:32304/TCP 60s
這里的 {minio_service_ip}:32304 服務將被用於存儲 Velero 的備份數據。
訪問的話:直接瀏覽器輸入 http://{NodeIP:32304} 默認賬戶信息: minio/minio123
2、創建 minio 的訪問密鑰文件 credentials-velero
cat <<'EOF' > credentials-velero [default] aws_access_key_id = minio aws_secret_access_key = minio123 EOF
ls查看下創建的訪問密鑰文件
[root@m-master126 velero-v1.6.0-linux-amd64]# ls credentials-velero examples LICENSE velero
3.3 安裝 Velero 客戶端
拷貝可執行文件 velero
cp velero /usr/local/bin/
3.4 安裝 Velero 服務端
執行安裝命令
velero install \ --plugins harbor.openserver.cn:443/library/velero/velero-plugin-for-aws:v1.0.0 \ --provider aws \ --bucket velero \ --namespace velero \ --secret-file ./credentials-velero \ --velero-pod-cpu-request 200m \ --velero-pod-mem-request 200Mi \ --velero-pod-cpu-limit 1000m \ --velero-pod-mem-limit 1000Mi \ --use-volume-snapshots=false \ --use-restic \ --restic-pod-cpu-request 200m \ --restic-pod-mem-request 200Mi \ --restic-pod-cpu-limit 1000m \ --restic-pod-mem-limit 1000Mi \ --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://{NodeIp}:32304
值得注意的是use-restic
開啟了 PV 備份的支持。執行安裝命令,會有回顯日志。下面繼續查看新創建的相關資源:
[root@m-master126 velero-v1.6.0-linux-amd64]# kubectl get crd|grep velero backups.velero.io 2021-05-31T12:54:19Z backupstoragelocations.velero.io 2021-05-31T12:54:19Z deletebackuprequests.velero.io 2021-05-31T12:54:19Z downloadrequests.velero.io 2021-05-31T12:54:19Z podvolumebackups.velero.io 2021-05-31T12:54:19Z podvolumerestores.velero.io 2021-05-31T12:54:19Z resticrepositories.velero.io 2021-05-31T12:54:19Z restores.velero.io 2021-05-31T12:54:19Z schedules.velero.io 2021-05-31T12:54:19Z serverstatusrequests.velero.io 2021-05-31T12:54:19Z volumesnapshotlocations.velero.io 2021-05-31T12:54:19Z
[root@m-master126 velero-v1.6.0-linux-amd64]# kubectl get all -n velero NAME READY STATUS RESTARTS AGE pod/minio-7b4ff54f67-kx259 1/1 Running 0 14h pod/minio-setup-mx8d5 0/1 Completed 0 14h pod/restic-c6hkt 1/1 Running 0 14h pod/restic-gfkwq 1/1 Running 0 14h pod/restic-j5bjr 1/1 Running 0 14h pod/restic-zrkzn 1/1 Running 0 14h pod/velero-df6dcd97-6qjj4 1/1 Running 0 14h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/minio NodePort 10.233.11.92 <none> 9000:32304/TCP 14h NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/restic 4 4 4 4 4 <none> 14h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/minio 1/1 1 1 14h deployment.apps/velero 1/1 1 1 14h NAME DESIRED CURRENT READY AGE replicaset.apps/minio-7b4ff54f67 1 1 1 14h replicaset.apps/velero-df6dcd97 1 1 1 14h NAME COMPLETIONS DURATION AGE job.batch/minio-setup 1/1 3s 14h
可以看到相關服務已經正常運行,Job 任務正常完成退出,大量 CRD 被創建。
3.5 卸載 Velero 服務端
kubectl delete namespace/velero clusterrolebinding/velero kubectl delete crds -l component=velero
參考:
https://blog.csdn.net/weixin_47003048/article/details/114006959
https://www.chenshaowen.com/blog/backup-kubernetes-cluster-using-velero.html