Velero 使用
一 災(zāi)難恢復(fù)

使用計(jì)劃和只讀備份存儲(chǔ)位置如果您定期備份集群的資源,那么在發(fā)生意外事故(如服務(wù)中斷)時(shí),您就能夠返回到以前的狀態(tài)。與 velero 一起這樣做看起來(lái)如下
在集群上首次運(yùn)行 velero 服務(wù)器后,設(shè)置每日備份(根據(jù)需要替換命令中的
velero schedule create
這將創(chuàng)建一個(gè)名為 < schedule name >-< timestamp > 的 Backup 對(duì)象。默認(rèn)的備份保持期(表示為 TTL (生存時(shí)間))為30天(720小時(shí)) ; 您可以使用 – TTL < duration > 標(biāo)志根據(jù)需要更改這個(gè)值。有關(guān)備份過(guò)期的更多信息,請(qǐng)參見 velero 如何工作。
災(zāi)難發(fā)生了,您需要重新創(chuàng)建您的資源。
將您的備份存儲(chǔ)位置更新為只讀模式(這可以防止在還原過(guò)程中在備份存儲(chǔ)位置創(chuàng)建或刪除備份對(duì)象)
kubectl patch backupstoragelocation
使用最新的 Velero 備份創(chuàng)建還原:
velero restore create --from-backup
準(zhǔn)備好后,將備份存儲(chǔ)位置恢復(fù)為讀寫模式:
kubectl patch backupstoragelocation
二 集群遷移
2.1 執(zhí)行遷移
使用 Backups 和 Restores Velero 可以幫助您將資源從一個(gè)集群移植到另一個(gè)集群,只要您將每個(gè) Velero 實(shí)例指向相同的云對(duì)象存儲(chǔ)位置。此場(chǎng)景假設(shè)您的集群由相同的云提供商托管。注意,Velero 并不支持跨云提供者遷移持久卷快照。如果您希望在云平臺(tái)之間遷移卷數(shù)據(jù),請(qǐng)啟用 restic,它將在文件系統(tǒng)級(jí)備份卷內(nèi)容。
(集群 1)假設(shè)您還沒有使用 Velero 調(diào)度操作檢查點(diǎn)數(shù)據(jù),您需要先備份整個(gè)集群(根據(jù)需要替換
velero backup create
默認(rèn)備份保留期,表示為 TTL(生存時(shí)間),為 30 天(720 小時(shí));您可以根據(jù)需要使用 --ttl
(Cluster 2)配置 BackupStorageLocations 和 VolumeSnapshotLocations,指向 Cluster 1使用的位置,使用 velero 備份位置 create 和 velero 快照位置 create。使用 – access-mode = ReadOnly 標(biāo)志創(chuàng)建 velero 備份位置 create,確保將 BackupStorageLocations 配置為只讀。
(集群 2)確保已創(chuàng)建 Velero 備份對(duì)象。 Velero 資源與云存儲(chǔ)中的備份文件同步。
velero backup describe
注意:默認(rèn)同步間隔為 1 分鐘,因此請(qǐng)務(wù)必等待再檢查。您可以使用 --backup-sync-period 標(biāo)志將此間隔配置到 Velero 服務(wù)器。
(集群 2)一旦您確認(rèn)正確的備份 (
velero restore create --from-backup
2.2 驗(yàn)證兩個(gè)集群
檢查第二個(gè)集群是否按預(yù)期運(yùn)行:
(Cluster 2) Run:
velero restore get
Then run:
velero restore describe
如果遇到問(wèn)題,請(qǐng)確保 Velero 在兩個(gè)集群的相同命名空間中運(yùn)行。
三 資源過(guò)濾
按命名空間、類型或標(biāo)簽篩選對(duì)象。
當(dāng)不使用過(guò)濾選項(xiàng)時(shí),Velero 包括備份或恢復(fù)中的所有對(duì)象。
3.1 包含
–include-namespaces
備份命名空間及其對(duì)象。
velero backup create
還原兩個(gè)名稱空間及其對(duì)象。
velero restore create
–include-resources
備份集群中的所有部署。
velero backup create
恢復(fù)集群中的所有部署和配置映射。
velero restore create
備份命名空間中的部署。
velero backup create
–include-cluster-resources
此選項(xiàng)可以具有三個(gè)可能的值:
true: 包含所有集群范圍的資源。
false:不包括集群范圍的資源。
nil :(“自動(dòng)”或未提供)
備份或恢復(fù)所有命名空間時(shí)包括集群范圍的資源。默認(rèn)值:真。
使用命名空間過(guò)濾時(shí),不包括集群范圍的資源。默認(rèn)值:假。
如果由自定義操作(例如 PVC->PV)觸發(fā),某些相關(guān)的集群范圍資源可能仍會(huì)被備份/恢復(fù),除非 --include-cluster-resources=false。
備份整個(gè)集群,包括集群范圍內(nèi)的資源。
velero backup create
僅恢復(fù)集群中的命名空間資源。
velero restore create
備份命名空間并包含集群范圍的資源。
velero backup create
–selector
包含與標(biāo)簽選擇器匹配的資源。
velero backup create
3.2 排除
從備份中排除特定資源。
通配符排除被忽略。
–exclude-namespaces
排除命名空間 從集群備份中排除 kube-system。
velero backup create
在還原期間排除兩個(gè)命名空間。
velero restore create
– exclude-resources
從備份中排除秘密。
velero backup create
排除機(jī)密和角色綁定。
velero backup create
velero.io/exclude-from-backup=true
帶有 velero.io/exclude-from-backup=true 標(biāo)簽的資源不包含在備份中,即使它包含匹配的選擇器標(biāo)簽。
四 Backup Reference
4.1 從備份中排除特定項(xiàng)目
即使它們與備份規(guī)范中定義的資源/名稱空間/標(biāo)簽選擇器匹配,也可以排除備份中的單個(gè)項(xiàng)。要做到這一點(diǎn),標(biāo)簽的項(xiàng)目如下:
kubectl label -n
4.2 指定特定種類資源的備份順序
要按照特定順序備份特定類型的資源,可以使用 option-ordered-resources 指定將 sort 映射到該類型特定資源的有序列表。資源名稱用逗號(hào)分隔,名稱格式為“ namespace/resourcename”。對(duì)于群集范圍資源,只需使用資源名稱。映射中的鍵值對(duì)用分號(hào)分隔。善良的名字是復(fù)數(shù)形式。
velero backup create backupName --include-cluster-resources=true --ordered-resources 'pods=ns1/pod1,ns1/pod2;persistentvolumes=pv4,pv8' --include-namespaces=ns1 velero backup create backupName --ordered-resources 'statefulsets=ns1/sts1,ns1/sts0' --include-namespaces=ns1
五 Backup Hooks
5.1 Backup Hooks
在執(zhí)行備份時(shí),可以指定一個(gè)或多個(gè)命令,以便在備份 pod 時(shí)在 pod 中的容器中執(zhí)行。這些命令可以配置為在任何自定義操作處理(“ pre”hooks)之前運(yùn)行,或者在所有自定義操作完成并備份了自定義操作指定的任何附加項(xiàng)(“ post”hooks)之后運(yùn)行。注意,鉤子不會(huì)在容器的 shell 中執(zhí)行。
有兩種方法可以指定鉤子:pod 本身的注釋和備份規(guī)范中的注釋。
5.2 將 Hooks 指定為 Pod 注釋
您可以在 pod 上使用以下注解讓 Velero 在備份 pod 時(shí)執(zhí)行一個(gè)鉤子:
5.2.1 Pre hooks
pre.hook.backup.velero.io/container
應(yīng)執(zhí)行命令的容器。默認(rèn)為 pod 中的第一個(gè)容器。可選的。
pre.hook.backup.velero.io/command
要執(zhí)行的命令。如果需要多個(gè)參數(shù),將命令指定為 JSON 數(shù)組,例如 ["/usr/bin/uname", “-a”]
pre.hook.backup.velero.io/on-error
如果命令返回非零退出代碼,該怎么辦。默認(rèn)為失敗。有效值為失敗并繼續(xù)。可選的。
pre.hook.backup.velero.io/timeout
等待命令執(zhí)行的時(shí)間。如果命令超過(guò)超時(shí),則認(rèn)為掛鉤錯(cuò)誤。默認(rèn)為 30 秒。可選的。
5.2.2 Post hooks
post.hook.backup.velero.io/container
應(yīng)執(zhí)行命令的容器。默認(rèn)為 pod 中的第一個(gè)容器。可選的。
post.hook.backup.velero.io/command
要執(zhí)行的命令。如果需要多個(gè)參數(shù),將命令指定為 JSON 數(shù)組,例如 ["/usr/bin/uname", “-a”]
post.hook.backup.velero.io/on-error
如果命令返回非零退出代碼,該怎么辦。默認(rèn)為失敗。有效值為失敗并繼續(xù)。可選的。
post.hook.backup.velero.io/超時(shí)
等待命令執(zhí)行的時(shí)間。如果命令超過(guò)超時(shí),則認(rèn)為掛鉤錯(cuò)誤。默認(rèn)為 30 秒。可選的。
5.3 在備份規(guī)范中指定鉤子
請(qǐng)參閱有關(guān)備份 API 類型的文檔,了解如何在備份規(guī)范中指定掛鉤。Backup API Type
5.4 使用 fsfreeze 的鉤子示例
此示例將引導(dǎo)您使用 pre 和 post 掛鉤來(lái)凍結(jié)文件系統(tǒng)。凍結(jié)文件系統(tǒng)有助于確保在拍攝快照之前所有掛起的磁盤 I/O 操作都已完成。
本示例使用 examples/nginx-app/with-pv.yaml。按照您的提供商的steps for your provider此示例。
5.5 Annotations
Velero example/nginx-app/with-pv.yaml作為將 pre 和 post 鉤子注釋直接添加到聲明式部署的示例。下面是就地更新對(duì)象的示例。
kubectl annotate pod -n nginx-example -l app=nginx \ pre.hook.backup.velero.io/command='["/sbin/fsfreeze", "--freeze", "/var/log/nginx"]' \ pre.hook.backup.velero.io/container=fsfreeze \ post.hook.backup.velero.io/command='["/sbin/fsfreeze", "--unfreeze", "/var/log/nginx"]' \ post.hook.backup.velero.io/container=fsfreeze
現(xiàn)在通過(guò)創(chuàng)建備份來(lái)測(cè)試 pre 和 post 掛鉤。您可以使用 Velero 日志來(lái)驗(yàn)證 pre 和 post 掛鉤是否正在運(yùn)行并無(wú)錯(cuò)誤退出。
velero backup create nginx-hook-test velero backup get nginx-hook-test velero backup logs nginx-hook-test | grep hookCommand
5.6 使用多個(gè)命令
要使用多個(gè)命令,請(qǐng)將目標(biāo)命令包裝在一個(gè) shell 中,并用 ;、&& 或其他 shell 條件結(jié)構(gòu)將它們分開。
pre.hook.backup.velero.io/command='["/bin/bash", "-c", "echo hello > hello.txt && echo goodbye > goodbye.txt"]'
六 Restore Reference
6.1 恢復(fù)到不同的命名空間
Velero 可以將資源還原到與備份它們的命名空間不同的命名空間中。為此,請(qǐng)使用 --namespace-mappings 標(biāo)志:
velero restore create RESTORE_NAME \ --from-backup BACKUP_NAME \ --namespace-mappings old-ns-1:new-ns-1,old-ns-2:new-ns-2
6.2 當(dāng)用戶刪除還原對(duì)象時(shí)會(huì)發(fā)生什么
還原對(duì)象表示還原操作。還原對(duì)象有兩種類型的刪除:
使用 velero restore delete 刪除。此命令將刪除代表它的自定義資源及其單獨(dú)的日志和結(jié)果文件。但是,它不會(huì)從集群中刪除它創(chuàng)建的任何對(duì)象。
使用 kubectl -n velero delete restore 刪除。此命令將刪除代表還原的自定義資源,但不會(huì)刪除對(duì)象存儲(chǔ)中的日志/結(jié)果文件,或在集群中還原期間創(chuàng)建的任何對(duì)象。
參考鏈接
https://velero.io/docs/v1.5/disaster-case/
Kubernetes
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。