使用Velero備份Kubernetes集群


1. Velero 簡介

Velero 是 heptio 團隊(被 VMWare 收購)開源的 Kubernetes 集群備份、遷移工具。

Velero 使用對象存儲保存集群資源。默認支持的對象存儲有 AWS、Azure、GCP ,兼容 S3 協議,也可以通過插件來擴展到其他平台,比如 Aliyun OSS。

目前,Velero 不具備版本管理功能,只能進行增量恢復,不會進行刪除或覆蓋操作。

2. Velero 工作原理

Velero 首先會在集群中創建各種 CRD 以及相關的控制器,通過對 CRD 對象的操作完成備份、恢復行為。Velero 的工作原理圖如下:

  1. Velero 客戶端調用 Kubernetes API 服務器創建 Backup 對象。
  2. BackupController 監聽 Backup 對象變化,以執行備份過程。
  3. 備份時,BackupController 通過 API Server 查詢相關數據。
  4. 備份后,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM