什麼是 Azure Kubernetes Service 備份?
Azure Kubernetes Service (AKS) 備份是一個簡單的雲端原生處理序,可用來備份和還原在 AKS 叢集中執行的容器化應用程式和資料。 您可以為儲存在 CSI 驅動程式型 Azure 磁碟儲存體中持續性磁碟區上的叢集狀態和應用程式資料設定排程備份。 解決方案可讓您透過將備份儲存在 Blob 容器和磁碟快照中,以更精細地控制要備份或還原的特定命名空間或整個叢集。 您可以針對端對端案例使用 AKS 備份,包括作業復原、複製開發人員/測試環境,以及叢集升級案例。
AKS 備份與 Azure 中的備份中心整合,提供單一檢視,可協助您大規模控管、監視、操作和分析備份。 您也可以在 Azure 入口網站的 AKS 執行個體服務功能表中,於 [設定] 下方取得備份。
AKS 備份的運作方式為何?
使用 AKS 備份來備份 AKS 工作負載,以及部署在 AKS 叢集中的永續性磁碟區。 解決方案需要在 AKS 叢集安裝備份延伸模組。 備份保存庫會與延伸模組通訊,完成與備份和還原相關的作業。 使用備份延伸模組是強制性的,而且延伸模組必須安裝在 AKS 叢集內,才能啟用叢集的備份和還原。 設定 AKS 備份時,您會為儲存體帳戶和儲存備份的 Blob 容器新增值。
除了備份延伸模組,還會在 AKS 叢集的受控資源群組中建立使用者身分識別 (稱為延伸模組身分識別)。 延伸模組身分識別會獲得指派儲存體帳戶參與者角色,該記憶體帳戶的備份會儲存在 Blob 容器中。
若要支援公用、私人和授權的 IP 型叢集,AKS 備份需要在 AKS 叢集與備份保存庫之間啟用受信任的存取權。 受信任的存取權允許備份保存庫存取 AKS 叢集,因為已為它指派備份作業的特定權限。 如需 AKS 受信任存取權的詳細資訊,請參閱使用受信任存取權讓 Azure 資源存取 AKS 叢集。
注意
AKS 備份可讓您將備份儲存在作業層和保存庫層中。 作業層是本機數據存放區(備份會以快照集的形式儲存在您的租使用者中)。 您現在可以每天移動一個恢復點,並使用 AKS 備份將它儲存在保存庫層中作為 Blob(租使用者外部)。 儲存在保存庫中的備份也可用來還原次要區域中的數據(Azure 配對區域)。
安裝備份延伸模組並啟用受信任存取權之後,您可以根據備份原則設定叢集的排程備份。 您也可以將備份還原至原始叢集,或是位於相同訂用帳戶和區域中的替代叢集。 您可以在設定特定作業時,選擇特定命名空間或整個叢集作為備份和還原設定。
備份解決方案會針對部署於叢集的 AKS 資料來源,以及針對儲存於叢集永續性磁碟區的資料啟用備份作業,然後將備份儲存在 Blob 容器。 磁碟型永續性磁碟區會以磁碟快照集的方式,備份於快照集資源群組。 Blob 中的快照集和叢集狀態,會合併成儲存在稱為作業層之租用戶的復原點。 您也可以將作業層中的備份 (一天、一週、一個月或一年內的第一次成功備份) 轉換成 Blob,然後一天將它們移至保存庫 (租用戶外) 一次。
注意
目前,Azure 備份僅支援 CSI 驅動程式型 Azure 磁碟儲存體中的永續性磁碟區。 備份期間,解決方案會略過其他持續性磁碟區類型,例如 Azure 檔案共用和 Blob。 此外,如果您已定義保存庫層的保留規則,則如果永續性磁碟區的大小小於或等於 1 TB,則備份才有資格移至保存庫。
設定備份
若要設定 AKS 叢集的備份,請先建立備份保存庫。 保存庫可以讓您合併檢視跨不同資料來源設定的備份。 AKS 備份同時支援作業層和保存庫層備份。
注意
- 備份保存庫和您想備份或還原的 AKS 叢集,必須位於相同的區域和訂用帳戶中。
- 備份保存庫儲存體備援設定 (LRS/GRS) 只會套用至儲存於保存庫層的備份。 如果您想使用備份進行災害復原,請將儲存體備援設定為已啟用跨區域還原的 GRS。
AKS 備份會自動觸發排程的備份作業。 作業會將叢集資源複製到 Blob 容器,並根據備份頻率建立磁碟型永續性磁碟區的增量快照集。 備份會根據備份原則中定義的保留期間,保留於作業層和保存庫層,並在持續時間結束後刪除。
注意
您可以使用 AKS 備份為每個備份執行個體使用不同的備份設定,為單一 AKS 叢集建立多個備份執行個體。 不過,AKS 叢集的每個備份執行個體,都應該在不同的備份保存庫中建立,或在相同的備份保存庫使用不同的備份原則建立。
管理備份
AKS 叢集的備份設定完成時,會在備份保存庫建立備份執行個體。 您可以在 Azure 入口網站 AKS 執行個體的 [備份] 區段檢視叢集的備份執行個體。 您可以透過對應的備份執行個體,對執行個體執行任何備份相關作業,例如起始還原、監視、停止保護等等。
AKS 備份也可以直接與備份中心整合,協助您集中管理所有 AKS 叢集的保護,以及其他獲得備份支援的工作負載。 備份中心是所有備份需求的單一檢視,例如監視作業以及備份和還原的狀態。 備份中心可協助您確保合規性和治理、分析備份使用量,以及執行重要作業來備份和還原資料。
AKS 備份使用受控識別存取其他 Azure 資源。 若要設定 AKS 叢集的備份,並從過去的備份還原,備份保存庫的受控識別需要在 AKS 叢集有一組權限,以及建立及管理快照集的快照集資源群組。 目前,AKS 叢集需要在快照集資源群組有一組權限。 此外,備份延伸模組會建立使用者身分識別,並指派一組權限來存取備份儲存於 Blob 的儲存體帳戶。 您可以使用 Azure 角色型存取控制 (Azure RBAC),授與對受控識別的權限。 受控識別是僅限搭配 Azure 資源使用的特殊類型的服務準則。 深入了解受控識別。
從備份還原
您可以從復原點存在的任何時間點還原資料。 備份執行個體處於受保護狀態時,就會建立復原點,並可用來還原資料,直到備份原則保留資料為止。
Azure 備份可讓您選擇命名空間和其他篩選選項,還原備份的所有項目,或使用細控制項從備份選取特定項目。 此外,您可以在原始 AKS 叢集 (已備份的叢集) 或替代 AKS 叢集上執行還原。 您可以將儲存於作業和儲存庫層的備份,還原至相同和不同訂用帳戶中的叢集。 只有儲存於保存庫層的備份,可用來還原至不同區域中的叢集 (Azure 配對區域)。
若要還原儲存於保存庫層的備份,您必須提供備份資料解除凍結的暫存位置。 這個暫存位置包含資源群組和儲存體帳戶 (位於相同區域),以及作為還原目標叢集的訂用帳戶。 還原期間,解除凍結過程會建立特定資源 (Blob 容器、磁碟和磁碟快照集),然後在還原作業完成之後清除。
發生資源衝突時,適用於 AKS 的 Azure 備份目前在執行還原作業時支援下列兩個選項 (備份資源與目標 AKS 叢集中的資源同名)。 您可以在定義還原設定時選擇其中一個選項。
跳過:預設會選取這個選項。 例如,如果您已備份名為 pvc-azuredisk 的 PVC,而您打算在其中還原的目標叢集有相同名稱的 PVC,則備份延伸模組會跳過還原備份的永續性磁碟區宣告 (PVC)。 在這種情況下,建議您從叢集刪除資源,然後執行還原作業,因此只有叢集有備份項目,而且不會跳過。
修補:這個選項允許在目標叢集的資源上修補備份資源的可變變數。 如果您想更新目標叢集中的複本數,可以選擇修補作為作業。
注意
如果資源已經存在,AKS 備份目前不會在目標叢集刪除及重新建立資源。 如果您嘗試在原始位置還原永續性磁碟區,請刪除現有的永續性磁碟區,然後執行還原作業。
使用自訂勾點進行備份和還原
您可以使用自訂勾點擷取用於部署為容器化工作負載之資料庫的磁碟區應用程式一致快照集。
何謂自訂勾點?
您可以使用 AKS 備份,在備份和還原作業執行自訂勾點。 勾點是設定為在備份作業期間或還原之後,於容器下之 Pod 執行一或多個命令的命令。 您可以將這些勾點定義為自訂資源,並且部署在您想備份或還原的 AKS 叢集。 自訂資源部署於必要命名空間的 AKS 叢集時,您會提供詳細資料做為流程的輸入資料,以設定備份和還原。 備份延伸模組會執行 YAML 檔案中定義的勾點。
注意
勾點不會在容器上的殼層執行。
AKS 中的備份有兩種類型的勾點:
- 備份勾點
- 還原勾點
備份勾點
在備份勾點中,您可以設定命令,在任何自訂動作處理之前執行勾點 (勾點前),或在完成所有自訂動作之後,以及備份自訂動作所指定的任何其他專案之後執行勾點 (勾點後)。
例如,以下是使用備份勾點部署自訂資源的 YAML 範本:
apiVersion: clusterbackup.dataprotection.microsoft.com/v1alpha1
kind: BackupHook
metadata:
# BackupHook CR Name and Namespace
name: bkphookname0
namespace: default
spec:
# BackupHook is a list of hooks to execute before and after backing up a resource.
backupHook:
# BackupHook Name. This is the name of the hook that will be executed during backup.
# compulsory
- name: hook1
# Namespaces where this hook will be executed.
includedNamespaces:
- hrweb
excludedNamespaces:
labelSelector:
# PreHooks is a list of BackupResourceHooks to execute prior to backing up an item.
preHooks:
- exec:
# Container is the container in the pod where the command should be executed.
container: webcontainer
# Command is the command and arguments to execute.
command:
- /bin/uname
- -a
# OnError specifies how Velero should behave if it encounters an error executing this hook
onError: Continue
# Timeout is the amount of time to wait for the hook to complete before considering it failed.
timeout: 10s
- exec:
command:
- /bin/bash
- -c
- echo hello > hello.txt && echo goodbye > goodbye.txt
container: webcontainer
onError: Continue
# PostHooks is a list of BackupResourceHooks to execute after backing up an item.
postHooks:
- exec:
container: webcontainer
command:
- /bin/uname
- -a
onError: Continue
timeout: 10s
還原勾點
在還原勾點指令碼中,會撰寫自訂命令或指令碼,以在還原之 AKS Pod 的容器中執行。
以下是使用還原勾點部署自訂資源的 YAML 範本:
apiVersion: clusterbackup.dataprotection.microsoft.com/v1alpha1
kind: RestoreHook
metadata:
name: restorehookname0
namespace: default
spec:
# RestoreHook is a list of hooks to execute after restoring a resource.
restoreHook:
# Name is the name of this hook.
- name: myhook-1
# Restored Namespaces where this hook will be executed.
includedNamespaces:
excludedNamespaces:
labelSelector:
# PostHooks is a list of RestoreResourceHooks to execute during and after restoring a resource.
postHooks:
- exec:
# Container is the container in the pod where the command should be executed.
container: webcontainer
# Command is the command and arguments to execute from within a container after a pod has been restored.
command:
- /bin/bash
- -c
- echo hello > hello.txt && echo goodbye > goodbye.txt
# OnError specifies how Velero should behave if it encounters an error executing this hook
# default value is Continue
onError: Continue
# Timeout is the amount of time to wait for the hook to complete before considering it failed.
execTimeout: 30s
# WaitTimeout defines the maximum amount of time Velero should wait for the container to be ready before attempting to run the command.
waitTimeout: 5m
注意
- 還原期間,備份延伸模組會等候容器出現,然後對其執行 exec 命令 (在還原勾點中定義)。
- 如果您要執行還原至已備份的相同命名空間,將不會執行還原勾點,因為它只會尋找產生的新容器。 不論是否選擇略過或修補原則,都是如此。
將備份還原至 AKS 叢集時修改資源
您可以使用資源修改功能在還原期間修改備份的 Kubernetes 資源,方法是將 JSON 修補程式指定為部署在 AKS 叢集中的 configmap
。
在還原期間建立並套用資源修飾元 configmap
若要建立並套用資源修改,請遵循下列步驟:
建立資源修飾元 configmap。
您需要從定義資源修飾元的 YAML 檔案,在慣用的命名空間中建立一個 configmap。
建立命令的範例:
version: v1 resourceModifierRules: - conditions: groupResource: persistentvolumeclaims resourceNameRegex: "^mysql.*$" namespaces: - bar - foo labelSelector: matchLabels: foo: bar patches: - operation: replace path: "/spec/storageClassName" value: "premium" - operation: remove path: "/metadata/labels/test"
- 上述 configmap 會將 JSON 修補程式套用至 namespaces bar 和 foo 中名稱開頭為
mysql
和match label foo: bar
的所有永續性磁碟區複本。 JSON 修補程式會將storageClassName
取代為premium
,並將標籤test
從永續性磁碟區複本中移除。 - 在這裡,命名空間是備份資源的原始命名空間,而不是要還原資源的新命名空間。
- 您可以指定特定資源的多個 JSON 修補程式。 修補程式會根據 configmap 中指定的順序套用。 後續的修補程式會依序套用。 如果為相同的路徑指定了多個修補程式,則最後一個修補程式會覆寫先前的修補程式。
- 您可以在 configmap 中指定多個
resourceModifierRules
。 規則會根據 configmap 中指定的順序套用。
- 上述 configmap 會將 JSON 修補程式套用至 namespaces bar 和 foo 中名稱開頭為
在還原設定中建立資源修飾元參考
當您執行還原作業時,請提供 ConfigMap 名稱和命名空間,以做為還原設定的一部分進行部署。 必須在 [資源修飾元規則] 下提供這些詳細資料。
資源修飾元支援的作業
加入
您可以使用 [新增] 作業,將新的區塊新增至資源 JSON。 在下列範例中,該作業會將新的容器詳細資料新增至具有部署的規格。
version: v1 resourceModifierRules: - conditions: groupResource: deployments.apps resourceNameRegex: "^test-.*$" namespaces: - bar - foo patches: # Dealing with complex values by escaping the yaml - operation: add path: "/spec/template/spec/containers/0" value: "{\"name\": \"nginx\", \"image\": \"nginx:1.14.2\", \"ports\": [{\"containerPort\": 80}]}"
移除
您可以使用 [移除] 作業,從資源 JSON 移除索引鍵。 在下列範例中,作業會移除使用 test 作為索引鍵的標籤。
version: v1 resourceModifierRules: - conditions: groupResource: persistentvolumeclaims resourceNameRegex: "^mysql.*$" namespaces: - bar - foo labelSelector: matchLabels: foo: bar patches: - operation: remove path: "/metadata/labels/test"
Replace
您可以使用 [取代] 作業,將提及的路徑的值取代為替代的路徑。 在下列範例中,作業會將永續性磁碟區宣告中的 storageClassName 取代為 premium。
version: v1 resourceModifierRules: - conditions: groupResource: persistentvolumeclaims resourceNameRegex: "^mysql.*$" namespaces: - bar - foo labelSelector: matchLabels: foo: bar patches: - operation: replace path: "/spec/storageClassName" value: "premium"
複製
您可以使用 [複製] 作業,將值從定義的資源的一個路徑複製到另一個路徑。
version: v1 resourceModifierRules: - conditions: groupResource: deployments.apps resourceNameRegex: "^test-.*$" namespaces: - bar - foo patches: - operation: copy from: "/spec/template/spec/containers/0" path: "/spec/template/spec/containers/1"
Test
您可以使用 [測試] 作業來檢查資源中是否有特定值。 如果值存在,則會套用修補程式。 如果值不存在,則不會套用修補程式。 在下列範例中,作業會檢查永續性磁碟區宣告的 StorageClassName 是否為 premium,如果是,則取代為 standard。
version: v1 resourceModifierRules: - conditions: groupResource: persistentvolumeclaims resourceNameRegex: ".*" namespaces: - bar - foo patches: - operation: test path: "/spec/storageClassName" value: "premium" - operation: replace path: "/spec/storageClassName" value: "standard"
JSON 修補程式
此 ConfigMap 會將 JSON 修補程式套用至命名空間 default 中的所有部署和 ``nginx
with the name that starts with
nginxdep`。 JSON 修補程式會將所有這類部署的複本計數更新為 12。version: v1 resourceModifierRules: - conditions: groupResource: deployments.apps resourceNameRegex: "^nginxdep.*$" namespaces: - default - nginx patches: - operation: replace path: "/spec/replicas" value: "12"
JSON 合併修補程式
此 ConfigMap 會將 JSON 合併修補程式套用至命名空間 default 和 nginx 中名稱開頭為 nginxdep 的所有部署。 JSON 合併修補程式將會使用值 "nginx1" 來新增/更新標籤 "app"。
version: v1 resourceModifierRules: - conditions: groupResource: deployments.apps resourceNameRegex: "^nginxdep.*$" namespaces: - default - nginx mergePatches: - patchData: | { "metadata" : { "labels" : { "app" : "nginx1" } } }
策略性合併修補程式
此 ConfigMap 會將策略性合併修補程式套用至命名空間 default 中名稱開頭為 nginx 的所有 Pod。 策略性合併修補程式會將容器 nginx 的映像更新為 mcr.microsoft.com/cbl-mariner/base/nginx:1.22
version: v1 resourceModifierRules: - conditions: groupResource: pods resourceNameRegex: "^nginx.*$" namespaces: - default strategicPatches: - patchData: | { "spec": { "containers": [ { "name": "nginx", "image": "mcr.microsoft.com/cbl-mariner/base/nginx:1.22" } ] } }
AKS 備份支援哪一個備份儲存層?
適用於 AKS 的 Azure 備份支援兩個儲存層作為備份資料存放區:
作業層:AKS 叢集中安裝的備份延伸模組,會先透過 CSI 驅動程式擷取磁碟區快照集,並將叢集狀態儲存在您的租用戶中的 Blob 容器。 這個階層支援較低的 RPO,且兩個備份之間的持續時間下限為四小時。 此外,針對 Azure 磁碟型磁碟區,作業層支援更快速的還原。
保存庫層:為了以低於快照集的成本儲存備份數據,AKS 備份支援保存庫標準數據存放區。 根據備份原則中設定的保留規則,(一天、一週、一個月或一年) 第一次成功備份會移至租用戶外的 Blob 容器。 這個資料存放區不僅允許較長的保留期,還提供勒索軟體保護。 您也可以在備份保存庫啟用異地備援和跨區域還原,將儲存在保存庫的備份移至另一個區域 (Azure 配對區域) 以進行復原。
注意
您可以定義保留規則,透過備份原則將備份資料儲存於保存庫標準資料存放區。 每天只有一個排程復原移至保存庫層。 不過,您可以根據選取的規則,將任意數目的隨選備份移至保存庫。
了解定價
您會產生以下費用:
受保護的執行個體費用:適用於 AKS 的 Azure 備份每月會收取每個命名空間受保護執行個體的費用。 設定 AKS 叢集的備份時,會建立受保護的執行個體。 每個執行個體都有特定數目的命名空間,這些命名空間為根據備份設定定義的方式備份。 如需 AKS 備份價格的詳細資訊,請參閱雲端備份價格,並選取 Azure Kubernetes Service 作為工作負載
快照集費用:適用於 AKS 的 Azure 備份會擷取儲存在 Azure 訂用帳戶中資源群組的快照集,保護磁碟型永續性磁碟區。 這些快照集會產生快照集儲存體費用。 快照集不會複製到備份保存庫,因此不會產生備份儲存體費用。 如需快照集價格的詳細資訊,請參閱受控磁碟定價。
備份記憶體費用:AKS Azure 備份 也支援將備份儲存在保存庫層中。 這可以藉由在備份原則中定義保存庫標準的保留規則來達成,每天有一個還原點有資格移至保存庫。 儲存在保存庫層中的還原點會根據儲存的總數據(以 GB 為單位)和備份保存庫上的備援類型啟用,分別收取稱為備份記憶體費用的個別費用。