一、Velero簡介
Velero提供備份和恢復(fù) Kubernetes 集群資源和持久卷的工具。
Velero功能:
- 對群集進(jìn)行備份,并在丟失時進(jìn)行還原。
- 將集群資源遷移到其他集群。
Velero 包括:
- 在群集上運(yùn)行的服務(wù)器
- 在本地運(yùn)行的命令行客戶端
- 開源地址:https://github.com/vmware-tanzu/velero
- 官方文檔:Velero
velero備份流程
- velero客戶端調(diào)用kubernetes API Server創(chuàng)建backup任務(wù)
- Backup控制器基于watch機(jī)制通過Api Server獲取到備份任務(wù)
- Backup控制器開始執(zhí)行備份動作,會通過請求Api Server獲取到需要備份的數(shù)據(jù)
- Backup 控制器將獲取到的數(shù)據(jù)備份到指定的對象存儲server端
二、準(zhǔn)備后端存儲
Velero支持很多種存儲插件,可查看:Velero Docs - Providers獲取插件信息,我們這里使用minio作為S3兼容的對象存儲提供程序。也可以在任意地方部署Minio對象存儲,只需要保證K8S集群可以訪問到即可。
這里使用一臺獨(dú)立機(jī)器docker部署minio
1、下載minio的docker鏡像
2、準(zhǔn)備數(shù)據(jù)目錄
# mkdri -pv /data/minio
3、docker部署minio
兩個變量定義minio的用戶、密碼
MINIO_ROOT_USER
MINIO_ROOT_PASSWORD
一個管理端口9999,一個數(shù)據(jù)端口9000
容器正常啟動后,通過瀏覽器訪問http://IP:9999 輸入上面定義的用戶、密碼即可登錄
登錄之后,創(chuàng)建一個Bucket,命名為velerodata
參考文章?Docker 搭建 Minio 容器 (完整詳細(xì)版)_docker minio-CSDN博客
minio也可部署到 k8s集群里
三、安裝velero
velero包含velero客戶端和服務(wù)端,服務(wù)端需要部署在可以使用kubectl命令操作k8s集群的機(jī)器上,這里就安裝在k8s的master上
從GitHub上搜索下載即可:Releases · vmware-tanzu/velero · GitHub
下載最新的release linux_amd64版本
將velero執(zhí)行程序cp至/usr/local/bin/目錄下即可,部署Server之前Server的版本是獲取不到的
部署Server
先創(chuàng)建認(rèn)證文件,把minio的用戶名、密碼寫到這個文件
使用velero命令部署velero server
velero install \
--provider aws \
--image velero/velero:latest \
--plugins velero/velero-plugin-for-aws:v1.8.2 \
--bucket velerodata \
--secret-file /root/credentials-velero \
--use-node-agent \
--use-volume-snapshots=false \
--namespace velero \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.49.133.147:9000 \
--wait
# 執(zhí)行install命令后會創(chuàng)建一系列清單,包括CustomResourceDefinition、Namespace、Deployment等。
這里遇到一個坑
有些節(jié)點(diǎn)上的node-agent pod總是起不來,查看日志報沒有velero命令(這個是node-agent pod里容器的默認(rèn)命令),后面通過檢查發(fā)現(xiàn)報錯的節(jié)點(diǎn)上的velero image不是最新的,但tag確實是latest,確實是個坑
舊版本鏡像是45.5MB,新版本鏡像是59.7MB,使用crictl重新下載正常的鏡像,然后使用nerdctl工具把新版本鏡像的tag改成docker.io/velero/velero:latest(與daemonset里的一致),之后pods成功啟動
卸載velero
kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero
四、備份、恢復(fù)k8s上的資源
使用官方案例創(chuàng)建測試應(yīng)用
創(chuàng)建備份
到minio上查看備份數(shù)據(jù)
測試恢復(fù)
先刪除nginx-example名稱空間里的所有資源
創(chuàng)建恢復(fù),再檢查nginx-example名稱空間里的資源,可以看到名稱空間里的資源恢復(fù)回來了
備份命令參數(shù)
恢復(fù)命令參數(shù)
批量備份名稱空間腳本,這個腳本定時執(zhí)行即可達(dá)到定時備份所有名稱空間的目的
五、資源遷移
這個架構(gòu)里有個巧妙的地方是,如果兩個k8s集群上都有velero,并且velero的后端存儲指向同一個Bucket,這樣這個Bucket可以當(dāng)做共享存儲來用,即從集群A備份出來的數(shù)據(jù),可以輕松恢復(fù)到集群B上,這樣也相當(dāng)于一個遷移動作。
如上個步驟備份的nginx-backup1220可以在另一個集群上恢復(fù),如下是在集群B上恢復(fù)了nginx-backup1220,從svc的cluster-ip可以看到這是另一個集群
從這個過程得知,如果多個集群上的velero的后端存儲指向相同的Bucket,velero的備份可以在多個集群上共享使用。
更多自定義的備份恢復(fù),后面再補(bǔ)充。。。文章來源:http://www.zghlxwxcb.cn/news/detail-762981.html
參考文章?https://www.cnblogs.com/wubolive/p/17345716.html文章來源地址http://www.zghlxwxcb.cn/news/detail-762981.html
到了這里,關(guān)于使用Velero備份、恢復(fù)k8s集群上的資源的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!