Azure Kubernetes Service (AKS) 備份是一個簡單的雲端原生程式,可讓您用來備份和還原在 AKS 叢集中執行的容器化應用程式和數據。 您可以為基於容器儲存介面(CSI)驅動程式的 Azure 磁碟儲存中儲存在 Kubernetes 永續性磁碟區上的叢集狀態和應用程式資料設定排程備份。
此解決方案可讓您更細微地控制。 您可以將備份或還原特定命名空間或整個叢集,方法是將備份儲存在 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 備份可針對部署在叢集中的 AKS 數據源啟用備份作業。 它也會針對儲存在叢集永續性磁碟區中的數據啟用備份作業。 然後,它會將備份儲存在 Blob 容器中。 以磁碟為基礎的持久性磁碟區會備份成快照資源群組中的磁碟快照。 Blob 中的快照和叢集狀態結合形成一個稱為作業層的恢復點,這個恢復點儲存在您的租戶中。 您也可以將作業層中的第一次成功備份(一天、一周、月或一年的第一次成功備份)轉換為 Blob,然後每天將備份移至保存庫(租使用者外部)。
附註
目前,Azure 備份僅支援以 CSI 驅動程式為基礎的 Azure 磁碟記憶體中的永續性磁碟區。 在備份期間,解決方案會略過其他永續性磁碟區類型,例如 Azure 檔案共用和 Blob。 此外,如果您為保存庫層設定定義的保留規則,只有在永續性磁碟區小於或等於 1 TB 時,備份才有資格移至保存庫。
設定備份
若要設定 AKS 叢集的備份,請先建立備份保存庫。 保存庫提供跨不同數據源設定之備份的合併檢視。 AKS 備份支援作業層級和保存庫層級的備份。
備份保存庫記憶體備援設定(本地備援記憶體或異地備援記憶體)僅適用於儲存在保存庫層中的備份。 如果您想要使用備份進行災害復原,請將記憶體備援設定為已啟用跨區域還原的 GRS。
附註
備份保存庫和您想備份或還原的 AKS 叢集,必須位於相同的區域和訂用帳戶中。
AKS 備份會自動觸發排程的備份作業。 作業會根據備份頻率,將叢集資源複製到 Blob 容器,並建立磁碟型永續性磁碟區的增量快照集。 備份會根據備份原則中定義的保留期間,保留於作業層和保存庫層中。 當持續時間結束時,會刪除備份。
您可以使用 AKS 備份為每個備份執行個體使用不同的備份設定,為單一 AKS 叢集建立多個備份執行個體。 不過,建議您以下列兩種方式之一建立 AKS 叢集的每個備份實例:
- 在不同的備份保存庫中
- 在同一個備份保存庫中使用不同的備份原則
管理備份
AKS 叢集的備份設定完成時,會在備份保存庫建立備份執行個體。 您可以在 Azure 入口網站 AKS 執行個體的 [備份]區段檢視叢集的備份執行個體。 您可以透過對應的備份執行個體,對執行個體執行任何備份相關作業,例如起始還原、監視、停止保護等等。
AKS 備份也會直接與備份中心整合,以協助您集中管理所有 AKS 叢集和其他備份支援的工作負載的保護。 備份中心會針對所有備份需求提供單一檢視,例如監視作業和備份和還原的狀態。 備份中心可協助您確保合規性和治理、分析備份使用量,以及執行重要作業來備份和還原資料。
AKS 備份使用受控識別存取其他 Azure 資源。 若要設定 AKS 叢集的備份,以及從先前的備份還原,備份保存庫的受控識別需要 AKS 叢集的一組許可權。 它也需要建立和管理快照集之快照資源群組的一組許可權。 目前,AKS 叢集需要在快照集資源群組有一組權限。
此外,備份延伸模組會建立使用者身分識別,並指派一組權限來存取備份儲存於 Blob 的儲存體帳戶。 您可以使用 Azure 角色為基礎的存取控制,授予管理身份權限。 受控識別是僅限搭配 Azure 資源使用的特殊類型的服務準則。 深入了解受控識別。
從備份還原
您可以從復原點存在的任何時間點還原資料。 當備份實例處於受保護狀態時,就會建立恢復點。 它可用來還原數據,直到備份原則保留數據為止。
Azure 備份可讓您選擇還原備份的所有專案,或使用細微控件,使用命名空間和其他篩選選項從備份中選取特定專案。 此外,您可以在原始 AKS 叢集(備份的叢集)或替代 AKS 叢集上執行還原。 您可以儲存在作業層和儲存庫層中的備份還原至相同或不同訂用帳戶中的叢集。 只有儲存在 Vault Tier 層中的備份可用來還原至不同區域中的叢集(Azure 配對區域)。
若要還原儲存在保存庫層中的備份,您必須提供備份數據凍結的預備位置。 此暫存位置包含資源群組和記憶體帳戶,與要還原的目標叢集位於相同的區域和訂用帳戶內。 在還原期間,會建立特定資源(Blob 容器、磁碟和磁碟快照集)作為凍結的一部分。 還原作業完成之後,就會清除它們。
適用於 AKS 的 Azure 備份目前針對發生資源衝突的案例支援下列兩個選項。 當備份的資源與目標 AKS 叢集中的資源名稱相同時,就會發生資源衝突。 您可以在定義還原設定時選擇其中一個選項。
跳過:預設會選取這個選項。 例如,如果您備份名為
pvc-azuredisk的永續性磁碟區宣告(PVC),並在具有相同名稱的目標叢集中還原,備份延伸模組會略過備份的PVC 還原。 在這種情況下,建議您從叢集刪除資源。 然後,執行還原作業,讓備份項目僅在叢集中可用,並確保不會被忽略。修補:這個選項允許在目標叢集的資源上修補備份資源的可變變數。 如果您想更新目標叢集中的複本數,可以選擇修補作為作業。
附註
如果目標叢集中的資源已經存在,AKS 備份目前不會刪除並重新建立資源。 如果您嘗試在原始位置還原永續性磁碟區,請刪除現有的永續性磁碟區,然後執行還原作業。
使用自訂掛勾進行備份和還原
您可以使用自訂勾點擷取用於部署為容器化工作負載之資料庫的磁碟區應用程式一致快照集。
何謂自訂鉤子?
您可以使用 AKS 備份,在備份和還原作業中執行自訂掛鉤。 鉤子被設定為在備份作業期間或還原之後,在 Pod 下的容器中執行一個或多個命令。
您可以將這些勾點定義為自訂資源,並且部署在您想備份或還原的 AKS 叢集。 自訂資源部署於必要命名空間的 AKS 叢集時,您會提供詳細資料做為流程的輸入資料,以設定備份和還原。 備份延伸模組會執行 YAML 檔案中定義的勾點。
附註
勾點不會在容器上的殼層執行。
AKS 中的備份有兩種類型的掛鉤:
- 備份勾點
- 還原勾點
備份勾點
當您使用備份鉤子時,您可以設定命令以在任何自定義動作處理之前執行鉤子(PreHooks)。 您也可以在完成所有自定義動作後執行鉤子,並備份自定義動作所指定的任何其他項目(PostHooks)。
例如,以下是使用備份勾點部署自訂資源的 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 修補程式指定為 configmap 部署在 AKS 叢集中。
在還原期間建立並套用資源修飾器 configmap
若要建立並套用資源修改,請遵循下列步驟:
建立資源修改器
configmap。您需要從定義資源修飾詞的
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中的所有永續性磁碟區複本,並套用至名稱以foo和mysql開頭的match label foo: bar。 JSON 修補程式會將storageClassName取代為premium,並從永續性磁碟區複本中移除卷標test。 - 在這裡,
namespace是備份資源的原始命名空間,而不是要還原資源的新命名空間。 - 您可以為特定資源指定多個 JSON 補丁。 修補程式會根據
configmap中指定的順序來套用。 下一個修補程式會依序套用。 如果為相同的路徑指定了多個修補程式,則最後一個修補程式會覆寫先前的修補程式。 - 您可以在
resourceModifierRules中指定多個configmap。 規則會根據 中指定的configmap順序套用。
- 先前
在還原配置中建立資源修改器參考
當您執行還原作業時,請提供
ConfigMap name及其namespace部署位置做為還原組態的一部分。 必須在 [資源修飾元規則] 下提供這些詳細資料。
修飾資源之作業支援
加入
您可以使用 [新增 ] 作業,將新的區塊新增至資源 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}]}"移除
您可以使用 Remove 作業,從資源 JSON 移除 金鑰。 在下列範例中,作業會移除具有
test作為索引鍵的標籤。version: v1 resourceModifierRules: - conditions: groupResource: persistentvolumeclaims resourceNameRegex: "^mysql.*$" namespaces: - bar - foo labelSelector: matchLabels: foo: bar patches: - operation: remove path: "/metadata/labels/test"取代
您可以使用 [取代] 作業,將提及的路徑的值取代為替代的路徑。 在下列範例中,作業會將PVC中的
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"測試
您可以使用 [測試] 作業來檢查資源中是否有特定值。 如果值存在,則會套用修補程式。 如果值不存在,則不會套用修補程式。 在下列範例中,作業會檢查 PVCs 是否具有
premium作為StorageClassName,如果為 true,則將其替換為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 修補程式
這會根據預設,將 JSON 補丁套用至命名空間中的所有部署,以及套用至名稱以
configmapnginx開頭的那些部署。 JSON 修補程式會將所有這類部署的複本計數更新為12。version: v1 resourceModifierRules: - conditions: groupResource: deployments.apps resourceNameRegex: "^nginxdep.*$" namespaces: - default - nginx patches: - operation: replace path: "/spec/replicas" value: "12"JSON 合併修補程式
這會將 JSON 合併修補程式套用至命名空間 default 和
configmap中所有部署,其名稱以nginx開頭。 JSON 合併修補程式將會使用 值app來新增或更新標籤nginx1。version: v1 resourceModifierRules: - conditions: groupResource: deployments.apps resourceNameRegex: "^nginxdep.*$" namespaces: - default - nginx mergePatches: - patchData: | { "metadata" : { "labels" : { "app" : "nginx1" } } }策略式合併修補
這會將策略性合併修補
configmap套用至名為 default 的命名空間中的所有 Pod,名稱開頭為nginx。 原則式合併修補程式會將容器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),且兩個備份之間的持續時間下限為 4 小時。 此外,針對以 Azure 磁碟為基礎的磁碟區,作業層支援更快速的還原。
保存庫層:AKS 備份支援保存庫標準數據存放區,以便在較長時間內以比快照集更低的成本儲存備份數據。 根據備份原則中設定的保留規則,第一次成功備份(一天、一周、月或一年)會移至租使用者外部的 Blob 容器。 這個資料存放區不僅允許較長的保留期,還提供勒索軟體保護。 您可以在備份保存庫中啟用地理冗余和跨區域還原,將儲存在保存庫中的備份移動至另一個區域(Azure 配對區域)以進行復原。
附註
您可以定義保留規則,透過備份原則將備份資料儲存於保存庫標準資料存放區。 每天只有一個預定的還原點會移至保管庫階層。 不過,您可以根據選取的規則,將任意數目的隨選備份移至保存庫。
了解定價
您會產生以下費用:
受保護的執行個體費用:適用於 AKS 的 Azure 備份每月會收取每個命名空間受保護執行個體的費用。 設定 AKS 叢集的備份時,會建立受保護的執行個體。 每個執行個體都有特定數目的命名空間,這些命名空間為根據備份設定定義的方式備份。 如需 AKS 備份定價的詳細資訊,請參閱 Azure 備份 的價格,並選取 Azure Kubernetes Service 作為工作負載。
快照費用:AKS 的 Azure 備份會藉由擷取儲存在 Azure 訂用帳戶中資源群組中的快照來保護磁碟式永久性磁碟區。 這些快照集會產生快照集儲存體費用。 由於快照集不會複製到備份保存庫,因此不會套用備份記憶體成本。 如需快照定價的詳細資訊,請參閱 受控磁碟定價。
備份記憶體費用:AKS 的 Azure 備份也支援將備份儲存在保存庫層中。 您可以在備份政策中定義保存庫層級的保存規則,每天有一個還原點符合移入保存庫的資格,以便將備份儲存在保存庫層。 儲存在存儲層中的還原點會根據儲存的總數據量(以 GB 為單位)及備份保存庫上啟用的冗餘類型,收取個別費用(稱為備份儲存費用)。