跳至主要内容

虛擬機備份、快照與還原

虛擬機備份與還原​

自 v0.3.0 起可用

虛擬機備份可從虛擬機頁面建立。虛擬機備份磁碟區將儲存在備份目標(NFS 或 S3 伺服器)中,並可用於還原新虛擬機或取代現有虛擬機。 vm-backup.png

備註

必須設定備份目標。如需更多資訊,請參閱設定備份目標。如果尚未設定備份目標,系統將提示您進行設定。

備份支援目前僅限於 Longhorn V1 資料引擎磁碟區。Harvester 無法為外部儲存中的磁碟區建立備份。

設定備份目標​

備份目標是用於存取 Harvester 中備份儲存的端點。備份儲存是 NFS 伺服器或 S3 相容伺服器,用於儲存虛擬機磁碟區的備份。備份目標可在 Settings > backup-target 設定。

下表概述所有備份目標通用的參數。

參數類型說明
Typestring儲存虛擬機所使用磁碟區備份的伺服器類型。您可以選擇 NFS 或 S3。
Refresh IntervalintegerHarvester 在與備份儲存同步備份之前等待的秒數。當值為 0 時,只有在所有備份磁碟區都處於 Ready 狀態時才會同步備份。
參數類型說明
Endpointstring(選填) 用於存取 S3 伺服器的端點主機名稱或 IP 位址
BucketNamestringS3 儲存貯體的名稱
BucketRegionstring建立 S3 儲存貯體的 AWS 區域
AccessKeyIDstring用於向 AWS 服務驗證請求的存取金鑰的第一部分(例如 AKIAIOSFODNN7EXAMPLE)
SecretAccessKeystring用於向 AWS 服務驗證請求的存取金鑰的第二部分(例如 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)
CertificatestringS3 伺服器的自簽 SSL 憑證
VirtualHostedStyleboolean使用虛擬託管樣式 URL 的選項,其中儲存貯體名稱是 URL 中網域名稱的一部分(bucket.example.com)

backuptarget-s3.png

建立虛擬機備份​

  1. 設定備份目標後,前往 Virtual Machines 頁面。
  2. 點擊虛擬機操作中的 Take Backup 以建立新的虛擬機備份。
  3. 設定自訂備份名稱並點擊 Create 以建立新的虛擬機備份。 create-backup.png

結果: 備份已建立。您將收到通知訊息,也可以前往 Backup & Snapshot > VM Backups 頁面查看所有虛擬機備份。

備份完成後,State 將設定為 Ready。

vm-backup-results.png

使用者可以使用此備份還原新虛擬機或取代現有虛擬機。

備註

執行 Ubuntu 16.04 之後版本的虛擬機的網路設定預設可能由 netplan 管理。在建立備份之前,您必須停止虛擬機、編輯設定(Edit Config > Advanced Options),然後重新啟動虛擬機。使用以下 network 設定作為 DHCP 設定的參考。

network:
ethernets:
enp1s0:
dhcp4: true
dhcp6: true
dhcp-identifier: mac
version: 2

還原的虛擬機會保留原始虛擬機的機器 ID。如果未指定 dhcp-identifier: mac,還原的虛擬機將從 DHCP 伺服器收到相同的 IP 位址,因為 netplan 預設使用機器 ID 作為 DHCP 用戶端識別碼。這就是為什麼您必須在建立執行 Ubuntu 的虛擬機備份之前設定 network 設定。若未這樣做,可能會導致意外行為和潛在的網路衝突。

使用備份還原新虛擬機​

若要從備份還原新虛擬機,請遵循以下步驟:

  1. 前往 VM Backups 頁面。
  2. 點擊右上角的 Restore Backup 按鈕。
  3. 指定新的虛擬機名稱並點擊 Create。
  4. 將使用備份磁碟區和中繼資料還原新虛擬機,您可以從 Virtual Machines 頁面存取它。 restore-vm.png

使用備份取代現有虛擬機​

您可以使用具有相同虛擬機備份目標的備份來取代現有虛擬機。

您可以選擇刪除或保留先前的磁碟區。預設情況下,所有先前的磁碟區都會被刪除。

需求: 虛擬機必須存在且必須處於關閉狀態。

  1. 前往 VM Backups 頁面。
  2. 點擊右上角的 Restore Backup 按鈕。
  3. 點擊 Replace Existing。
  4. 您可以從 Virtual Machines 頁面查看還原過程。 vm-restore-existing.png

在另一個 Harvester 叢集上還原新虛擬機​

自 v1.0.0 起可用

使用者現在可以利用虛擬機中繼資料與內容備份功能在另一個叢集上還原新虛擬機。

先決條件​

  • v1.4.0 及更高版本: 控制器會自動將虛擬機映像與新叢集同步,除非新叢集上已存在具有相同名稱或顯示名稱的虛擬機映像。

  • v1.4.0 之前的版本: 您必須在新叢集上上傳和設定虛擬機映像。確保映像名稱和設定相同,以便可以還原虛擬機。如需更多資訊,請參閱將相同的虛擬機映像上傳到新叢集。

將相同的虛擬機映像上傳到新叢集​

  1. 從現有叢集下載虛擬機映像。

vm-snapshot.png

  1. 解壓縮下載的映像。
$ gzip -d <image.gz>
  1. 在新叢集可存取的伺服器上託管映像。

範例(簡單的 HTTP 伺服器):

$ python -m http.server
  1. 檢查現有映像名稱(通常以 image- 開頭)並在新叢集上建立相同的映像。
$ kubectl get vmimages -A
NAMESPACE NAME DISPLAY-NAME SIZE AGE
default image-79hdq focal-server-cloudimg-amd64.img 566886400 5h36m
default image-l7924 harvester-v1.0.0-rc2-amd64.iso 3964551168 137m
default image-lvqxn opensuse-leap-15.3.x86_64-nocloud.qcow2 568524800 5h35m
  1. 在新叢集中套用具有相同名稱和設定的 VirtualMachineImage YAML。

範例:

$ cat <<EOF | kubectl apply -f -
apiVersion: harvesterhci.io/v1beta1
kind: VirtualMachineImage
metadata:
name: image-79hdq
namespace: default
spec:
displayName: focal-server-cloudimg-amd64.img
pvcName: ""
pvcNamespace: ""
sourceType: download
url: https://<server-ip-to-host-image>:8000/<image-name>
EOF
important

Harvester 只有在新舊叢集上的映像名稱和設定完全相同時才能還原虛擬機。

在新叢集中還原新虛擬機​

  1. 在新叢集中設定相同的備份目標。備份控制器將自動將備份中繼資料同步到新叢集。
  2. 前往 VM Backups 頁面。
  3. 選擇已同步的虛擬機備份中繼資料,並選擇使用指定的虛擬機名稱還原新虛擬機。
  4. 將使用備份磁碟區和中繼資料還原新虛擬機。您可以從 Virtual Machines 頁面存取它。

虛擬機快照與還原​

自 v1.1.0 起可用

虛擬機快照可從虛擬機頁面建立。虛擬機快照磁碟區將儲存在叢集中,並可用於還原新虛擬機或取代現有虛擬機。 vm-snapshot.png

建立虛擬機快照​

  1. 前往 Virtual Machines 頁面。
  2. 點擊虛擬機操作中的 Take VM Snapshot 以建立新的虛擬機快照。
  3. 設定自訂快照名稱並點擊 Create 以建立新的虛擬機快照。 create-snapshot.png

結果: 快照已建立。您也可以前往 Backup & Snapshot > VM Snapshots 頁面查看所有虛擬機快照。

快照完成後,State 將設定為 Ready。

vm-snapshot-results.png

使用者可以使用此快照還原新虛擬機或取代現有虛擬機。

備註

執行 Ubuntu 16.04 之後版本的虛擬機的網路設定預設可能由 netplan 管理。在建立快照之前,您必須停止虛擬機、編輯設定(Edit Config > Advanced Options),然後重新啟動虛擬機。使用以下 network 設定作為 DHCP 設定的參考。

network:
ethernets:
enp1s0:
dhcp4: true
dhcp6: true
dhcp-identifier: mac
version: 2

還原的虛擬機會保留原始虛擬機的機器 ID。如果未指定 dhcp-identifier: mac,還原的虛擬機將從 DHCP 伺服器收到相同的 IP 位址,因為 netplan 預設使用機器 ID 作為 DHCP 用戶端識別碼。這就是為什麼您必須在建立執行 Ubuntu 的虛擬機快照之前設定 network 設定。若未這樣做,可能會導致意外行為和潛在的網路衝突。

備註

在執行中的 RHEL9 客體虛擬機上執行虛擬機快照時可能會遇到 filesystem freeze failed 錯誤。如需疑難排解步驟和解決方案,請參閱執行中的 RHEL9 客體虛擬機無法凍結檔案系統

使用快照還原新虛擬機​

若要從快照還原新虛擬機,請遵循以下步驟:

  1. 前往 VM Snapshots 頁面。
  2. 點擊右上角的 Restore Snapshot 按鈕。
  3. 指定新的虛擬機名稱並點擊 Create。
  4. 將使用快照磁碟區和中繼資料還原新虛擬機,您可以從 Virtual Machines 頁面存取它。 restore-vm-snapshot.png

使用快照取代現有虛擬機​

您可以使用快照取代現有虛擬機。

備註

您只能選擇保留先前的磁碟區。

  1. 前往 VM Snapshots 頁面。
  2. 點擊右上角的 Restore Snapshot 按鈕。
  3. 點擊 Replace Existing。
  4. 您可以從 Virtual Machines 頁面查看還原過程。 restore-vm-snapshot-existing.png

虛擬機快照空間管理​

自 v1.4.0 起可用

每當您建立新的虛擬機備份或快照時,磁碟區都會佔用叢集中的額外磁碟空間。為了管理這一點,您可以在命名空間和虛擬機層級設定空間使用限制。設定的值代表所有備份和快照可使用的最大磁碟空間量。預設情況下不設定任何限制。

在命名空間層級設定快照空間使用限制​

  1. 前往 Namespaces 畫面。

  2. 找到目標命名空間,然後選擇 ⋮ > Edit Quota。

    edit-quota-namespace.png

  3. 指定命名空間中所有快照可佔用的最大磁碟空間量,然後點擊 Save。

    edit-quota-namespace-save.png

  4. 驗證設定的值是否顯示在 Namespaces 畫面上。

    edit-quota-namespace-read.png

在虛擬機層級設定快照空間使用限制​

  1. 前往 Virtual Machines 畫面。

  2. 找到目標虛擬機,然後選擇 ⋮ > Edit VM Quota。

    edit-quota-vm.png

  3. 指定虛擬機的所有快照可佔用的最大總磁碟空間量,然後點擊 Save。

    edit-quota-vm-save.png

  4. 驗證設定的值是否顯示在虛擬機詳細資訊畫面的 Quotas 標籤上。

    edit-quota-vm-read.png

虛擬機備份與快照的檔案系統凍結​

當客體虛擬機連接 QEMU Guest Agent 時,Harvester 控制器會透過 Kubevirt 的 virt-freezer 應用程式執行檔案系統凍結操作,以確保虛擬機備份和快照期間的檔案系統一致性。

此功能對於具有高 I/O 活動或需要時間點一致性保證的關鍵資料的虛擬機特別有價值。

先決條件​

檔案系統凍結和解凍功能取決於虛擬機設定,這_不受 Harvester 控制_。您必須確保虛擬機設定正確並支援所需的 libvirt 命令。

  • Red Hat Enterprise Linux (RHEL) 和 SUSE Linux Enterprise (SLE) Micro: 這些系統預設可能缺乏檔案系統凍結操作的足夠權限。您可能需要建立自訂 SELinux 政策。
  • Windows: 這些系統上的檔案系統凍結操作僅在啟用磁碟區陰影複製服務 (VSS) 服務時可用。
備註

當觸發 virt-freezer 應用程式時,KubeVirt 會與 QEMU Guest Agent 通訊以轉換作業系統特定的呼叫。Linux 系統使用 fsfreeze 系統呼叫,而 Windows 系統使用 VSS API。

驗證檔案系統凍結相容性​

若要驗證您的虛擬機是否支援檔案系統凍結操作,請執行以下步驟:

  1. 存取虛擬機的 virt-launcher compute 容器:
POD=$(kubectl get pods -n default \
-l vm.kubevirt.io/name=vm1 \
-o jsonpath='{.items[0].metadata.name}')
kubectl exec -it $POD -n default -c compute -- bash
  1. 嘗試使用 compute 容器中提供的 virt-freezer 應用程式凍結檔案系統:
virt-freezer --freeze --namespace <VM namespace> --name <VM name>
  1. 驗證凍結操作的結果。
important

不要跳過此步驟。此外,在執行任何其他操作之前,您必須解凍虛擬機檔案系統。

疑難排解檔案系統凍結問題​

因權限不足導致的檔案系統凍結錯誤​

Failed to freeze filesystem 錯誤可能會導致某些 Linux 發行版上的備份或快照失敗。

fs-freeze-fail.png

此問題通常發生在 SELinux 拒絕對 QEMU Guest Agent (qemu-ga) 的讀取存取時。您可以使用以下步驟驗證原因:

  1. 驗證您的虛擬機是否支援檔案系統凍結操作。

  2. 檢查系統日誌中的 SELinux Permission denied 錯誤。

如果您看到類似以下的訊息,則 SELinux 正在阻止所需的存取:

{"component":"freezer","level":"error","msg":"Freezing VMI failed","reason":"server error. command Freeze failed: \"LibvirtError(Code=1, Domain=10, Message='internal error: unable to execute QEMU agent command 'guest-fsfreeze-freeze': failed to open /data: Permission denied')\""}

若要解決此問題,您必須建立並安裝自訂 SELinux 政策模組。此解決方案已驗證可用於 RHEL 和 SLE Micro。

警告

使用 audit2allow 可能會授予廣泛的權限,因為它允許日誌中發現的所有動作。請仔細檢查產生的政策,或考慮使用適當的 SELinux 標籤掛載磁碟區以增強安全性。

  1. 從稽核日誌產生自訂 SELinux 政策模組:
grep qemu-ga /var/log/audit/audit.log | audit2allow -M my_qemu_ga
  1. 安裝產生的政策模組:
semodule -i my_qemu_ga.pp
  1. 重複步驟 1 和 2,直到 virt-freezer 可以成功凍結檔案系統。
important

在執行其他操作之前,您必須解凍虛擬機檔案系統。

virt-freezer --unfreeze --namespace <VM namespace> --name <VM name>

排程虛擬機備份與快照​

自 v1.4.0 起可用

Harvester 支援按排程建立虛擬機備份和快照,並可選擇保留特定數量的備份和快照。您可以在執行時暫停、恢復和更新排程。

建立虛擬機排程​

  1. 前往 Virtual Machine Schedules 畫面,然後點擊 Create Schedule。

create-schedule.png

  1. 設定以下設定:

configure-schedule.png

  • Type: 選擇 Backup 或 Snapshot。

  • Namespace 和 Virtual Machine Name: 指定來源虛擬機的命名空間和名稱。

  • Cron Schedule: 指定 cron 表達式(由空白字元分隔的欄位組成的字串)來定義排程屬性。

    important

    備份或快照建立間隔必須至少一小時。頻繁的備份或快照刪除會導致大量 I/O 負載。

    如果兩個排程具有相同的粒度級別,則每次迭代的時間偏移必須至少 10 分鐘。

  • Retain: 指定要保留的最新備份或快照數量。

    當超過此值時,Harvester 控制器會刪除最舊的備份或快照,並且 Longhorn 會開始快照清除。

  • Max Failure: 指定允許的連續失敗備份或快照建立嘗試的最大次數。

    當超過此值時,Harvester 控制器會暫停排程。

  1. 點擊 Create。

檢查虛擬機排程的狀態​

  1. 前往 Virtual Machine Schedules 畫面。

  2. 找到目標排程,然後點擊名稱以開啟詳細資訊畫面。

  3. 在 Basics 標籤上,驗證設定是否正確。

check-schedule-basic.png

  1. 在 Backups 標籤上,檢查根據排程建立的備份或快照的狀態。

check-schedule-backups.png

標記為 Ready 的備份和快照可用於還原來源虛擬機。如需更多資訊,請參閱虛擬機備份與還原和虛擬機快照與還原。

check-schedule-restore.png

編輯虛擬機排程​

  1. 前往 Virtual Machine Schedules 畫面。

  2. 找到目標排程,然後選擇 ⋮ > Edit Config。

edit-schedule-config.png

  1. 編輯 Cron Schedule、Retain 或 Max Failure 值。

edit-schedule-parameters.png

  1. 點擊 Save 以套用變更。

暫停或恢復虛擬機排程​

您可以暫停活動排程並恢復已暫停的排程。

  1. 前往 Virtual Machine Schedules 畫面。

  2. 找到目標排程,然後選擇 ⋮ > Suspend or Resume。

suspend-resume-schedule.png

當連續失敗的備份或快照建立嘗試次數超過 Max Failure 值時,排程會自動暫停。

如果備份目標無法存取,Harvester 不允許您恢復備份建立的已暫停排程。

備註

如果排程因超過 Max Failure 值而自動暫停,您必須在驗證備份/快照可以成功建立後明確恢復該排程。例如,當備份目標從先前的中斷連線恢復上線時,使用者可以先手動建立備份並檢查結果。

虛擬機操作與 Harvester 升級​

在升級 Harvester 之前,請確保沒有正在使用的虛擬機備份或快照,並且所有虛擬機排程都已暫停。當升級嘗試被拒絕時,Harvester UI 會顯示以下錯誤訊息:

  • 在升級嘗試期間正在建立、刪除或使用虛擬機備份或快照

    upgrade-vmbackup.png

  • 在升級嘗試期間虛擬機排程處於活動狀態

    upgrade-svmbackup.png

為了避免此類問題,Harvester 團隊計劃在啟動升級程序之前實作所有虛擬機排程的自動暫停。升級完成後,已暫停的排程也將自動恢復。如需更多資訊,請參閱 Issue #6759。

警告

Longhorn 具有類似的功能,稱為循環快照和備份,它使用循環作業來建立 Longhorn 磁碟區的定期快照或備份。此功能未整合到 Harvester 中,因為它與某些 Harvester 操作衝突(例如,虛擬機附加和叢集升級)。循環 Longhorn 快照和備份作業也可能在 Harvester 不知情的情況下產生大量 I/O,在某些情況下甚至會使叢集不穩定。

為了獲得最佳結果,請使用 Harvester 中的排程虛擬機備份與快照功能,該功能具有在可能的情況下減輕大量 I/O 的保護機制。再次強調,Harvester 不支援循環 Longhorn 快照和備份。