如何备份和还原您的Kubernetes集群资源和持久卷?
眾所周知,Kubernetes可以協(xié)調(diào)連接在一起,作為一個(gè)工作單元,形成高可用性的計(jì)算機(jī)集群。Kubernetes包含許多抽象概念,這些抽象概念允許將容器化的應(yīng)用程序部署到集群中,而無(wú)需將它們附加到單獨(dú)的機(jī)器上。
簡(jiǎn)而言之,Kubernetes擁有以下特性:
便攜式:公有、私有、混合、多云
可擴(kuò)展:模塊化、可插拔、可掛鉤、可組合
自我修復(fù):自動(dòng)放置、自動(dòng)重啟、自動(dòng)復(fù)制、自動(dòng)縮放
在本文中,我們將介紹如何使用Velero開(kāi)源工具備份和還原Kubernetes集群資源和持久卷的步驟。
第一節(jié) 為什么要備份?
首先,讓我們了解您需要使用備份的典型方案,如果從災(zāi)難中恢復(fù),則可以減少恢復(fù)時(shí)間。Kubernetes 資源從一個(gè)集群遷移到另一個(gè)集群或更高版本的 Kubernetes ,需要復(fù)制環(huán)境以進(jìn)行調(diào)試、開(kāi)發(fā)等。
現(xiàn)在我們已經(jīng)清楚了為什么需要備份了,接下來(lái)我們可以檢查要備份的對(duì)象列表。
要備份什么?Kubernetes資源存儲(chǔ)在etcd存儲(chǔ)中。etcd是一個(gè)一致且高度可用的鍵值存儲(chǔ),用作所有集群數(shù)據(jù)的 Kubernetes 的后備存儲(chǔ)。您可以在官方文檔中找到有關(guān) etcd 的詳細(xì)信息。集群中運(yùn)行的有狀態(tài)應(yīng)用程序的應(yīng)用程序數(shù)據(jù),即持久卷。
第二節(jié) Velero如何運(yùn)作
Velero( 以前稱(chēng)為Heptio Ark )為您提供了備份和還原 Kubernetes 集群資源和持久卷的工具。
Velero包含:
Ivacy VPN
在集群上運(yùn)行的服務(wù)器
在本地運(yùn)行的命令行客戶(hù)端
每個(gè)Velero操作(例如:按需備份、計(jì)劃備份、還原等)都是自定義資源,使用Kubernetes自定義資源(CRD)定義并存儲(chǔ)在etcd存儲(chǔ)中。
當(dāng)你運(yùn)行命令 velero backup create test-backup:時(shí)。
1.Velero客戶(hù)端調(diào)用Kubernetes API服務(wù)器以創(chuàng)建一個(gè) Backup 對(duì)象。
2.BackupController 看起來(lái)像一個(gè)新的 Backup 對(duì)象并執(zhí)行驗(yàn)證。
3.BackupController 開(kāi)始備份操作。它通過(guò)查詢(xún)API服務(wù)器以獲取資源來(lái)收集數(shù)據(jù)以進(jìn)行備份。
4.BackupController 調(diào)用對(duì)象存儲(chǔ)服務(wù)(例如AWS S3)以上傳備份文件。
在下一節(jié)中,我們將介紹有關(guān)如何備份和還原Kubernetes集群資源和持久卷的步驟。
第三節(jié) 先決條件
以下是此快速入門(mén)所需的先決條件:
1.具有Kubernetes最新穩(wěn)定版本的集群
2.Kubectl CLI
在安裝之前,請(qǐng)檢查我們是否具有正確的Kubernetes版本。
步驟#1 下載Velero
使用以下命令下載最新版本的Velero:
curl -LO https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz
使用Linux或者其他平臺(tái)的朋友,請(qǐng)參見(jiàn)發(fā)行頁(yè)面的說(shuō)明。
解壓縮下載文件并將velero可執(zhí)行文件移至/ usr / local / bin或您的路徑。
在您的本地目錄中創(chuàng)建特定于Velero的憑證文件(credentials-velero)。
echo "[default]?
aws_access_key_id = minio
aws_secret_access_key = minio123" > credentials-velero
Velero需要合適的存儲(chǔ)提供商來(lái)存儲(chǔ)備份和快照數(shù)據(jù),在本演示中,我們將使用Minio,這是一個(gè)在本地集群上運(yùn)行的S3兼容存儲(chǔ)服務(wù),Minio實(shí)例將使用上述憑據(jù)。?
現(xiàn)在我們已經(jīng)準(zhǔn)備好憑據(jù)和群集,接下來(lái)就可以安裝Velero服務(wù)器了。
步驟#2 安裝Velero服務(wù)器
在以下步驟中,我們將啟動(dòng)服務(wù)器和本地存儲(chǔ)服務(wù)。在Velero文件夾中,運(yùn)行以下命令:
使用以下命令配置本地存儲(chǔ)服務(wù):
kubectl apply -f examples/minio/00-minio-deployment.yaml使用以下命令啟動(dòng)Velero服務(wù)器:
velero install \--provider aws \--bucket velero \--secret-file ./credentials-velero \--use-volume-snapshots=false \--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.velero.svc:9000現(xiàn)在,我們假設(shè)Velero在本地集群中運(yùn)行,而沒(méi)有能夠提供快照的卷。
檢查是否成功創(chuàng)建部署了Velero。
步驟#3?部署示例應(yīng)用程序
下一步是使用以下命令在集群上部署示例nginx應(yīng)用程序:
kubectl apply -f velero/examples/nginx-app/base.yaml
檢查是否成功創(chuàng)建了示例應(yīng)用程序部署。
步驟#4?備份
現(xiàn)在,我們將為與 app = nginx 標(biāo)簽選擇器匹配的任何對(duì)象創(chuàng)建備份:
velero backup create nginx-backup --selector app=nginx
如果要備份除匹配標(biāo)簽的對(duì)象以外的所有對(duì)象,則可以使用“ backup notin(ignore)”選項(xiàng)。
還有一些選項(xiàng)可用于基于 cron 表達(dá)式創(chuàng)建備份計(jì)劃。
要驗(yàn)證備份是否已完成,請(qǐng)使用 describe 命令,如下所示:
velero backup describe nginx-backup
現(xiàn)在我們已經(jīng)完成了備份操作,為了測(cè)試還原操作,我們將刪除命名空間。
驗(yàn)證是否刪除了 nginx 服務(wù)和部署:
通常需要幾分鐘才能完全清理名稱(chēng)空間。
步驟#5 Restore
要列出我們創(chuàng)建的備份,請(qǐng)使用以下命令:
velero restore get
要恢復(fù)我們創(chuàng)建的備份,請(qǐng)使用以下命令:
velero restore create --from-backup nginx-backup還原完成后,您可以檢查還原的部署是否返回名稱(chēng)空間:
如果在還原操作過(guò)程中出現(xiàn)錯(cuò)誤或警告,則可以使用以下命令檢查詳細(xì)信息:
velero restore describe <RESTORE_NAME>
恭喜! 我們已經(jīng)成功進(jìn)行了備份和還原。
如果由于某些限制而無(wú)法使用Velero,則可以始終使用 Kubectl CLI 從現(xiàn)有 Kubernetes 集群中導(dǎo)出資源定義,然后將其應(yīng)用于目標(biāo)集群。?
以下是導(dǎo)出對(duì)象的命令。
kubectl get deployment -o=yaml --export > deployments.yaml第四節(jié) 局限性
以下是Velero的已知限制:
Velero當(dāng)前每個(gè)提供商都支持一套憑據(jù)。 尚無(wú)法在不同的位置使用不同的憑據(jù)。
卷快照受提供程序創(chuàng)建快照位置限制。 例如,AWS和Azure不允許您在不同卷所在區(qū)域中創(chuàng)建卷快照。
每個(gè)Velero備份每個(gè)卷都有一個(gè)BackupStorageLocation和一個(gè)VolumeSnapshotLocation。無(wú)法將單個(gè) Velero 備份同時(shí)發(fā)送到多個(gè)備份存儲(chǔ)位置,也不能將單個(gè)卷快照同時(shí)發(fā)送到多個(gè)位置。
不支持跨提供商快照。
總結(jié)
以上是生活随笔為你收集整理的如何备份和还原您的Kubernetes集群资源和持久卷?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 刷新.NET
- 下一篇: 为什么你没有选择xamarin?