View a markdown version of this page

還原 Amazon EKS 叢集 - AWS Backup

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

還原 Amazon EKS 叢集

您可以使用 AWS Backup 主控台或 CLI 還原 EKS 叢集備份。EKS 備份是包含 EKS 叢集狀態和持久性磁碟區備份的複合復原點。

AWS Backup 支援多個還原體驗,包括精細的命名空間層級還原。還原是非破壞性的,不會覆寫目標 EKS 叢集中的任何現有 Kubernetes 物件。還原也不會覆寫目標 EKS 叢集的 Kubernetes 版本。

EKS 備份必須還原至目標 EKS 叢集,這表示已預先佈建的 Amazon EKS 叢集。作為還原工作流程的一部分,您可以選擇建立新的 EKS 叢集,該叢集 AWS Backup 將代表您建立。

注意

AWS Backup 將提供一組有限的選項,以建立新的 EKS 叢集做為還原的一部分。對於所有 EKS 叢集建立功能,客戶可以使用 EKS 主控台或 API 建立新的 EKS 叢集,並選取此做為還原目標。 APIs

Amazon EKS 的還原功能

還原類型 還原目標 還原行為
現有叢集還原 還原至來源 EKS 叢集或現有的 EKS 叢集 將所有 Kubernetes 資源和持久性磁碟區還原至現有的 EKS 叢集。所有還原都是非破壞性的,且不會覆寫現有的物件。對於略過的物件,您可以訂閱 SNS 通知
新的叢集還原 建立新的 Amazon EKS 叢集做為 EKS 還原的一部分 還原會建立新的 EKS 叢集,並將所有 Kubernetes 資源和持久性磁碟區還原至新建立的叢集
命名空間還原 現有的 Amazon EKS 叢集 僅還原指定的命名空間,其 Kubernetes 資源和對應的持久性儲存還原是非破壞性的,並且不會覆寫現有的物件。對於略過的物件,您可以訂閱 SNS 通知
持久性儲存還原 持久性儲存相依性 將個別持久性儲存還原為獨立還原。請參閱還原 Amazon EBSAmazon S3Amazon EFS 的行為。

許可

所需的許可取決於還原類型和目標目的地。

還原前的考量事項

在開始 EKS 還原任務之前,請檢閱以下內容。如果您要還原跨帳戶或區域複製的 EKS 備份,請務必在還原之前檢查這些考量事項,以防止還原失敗。

  1. IAM 角色:還原至不同的叢集時,來源叢集中使用的 IAM 角色 (例如 Pod 身分、IRSA。 OIDC 提供者組態等) 必須存在於帳戶/區域中,做為目的地叢集。

  2. 確保 EKS 版本和相容性:您要還原之物件的 API 版本應該是相同的版本 (或盡可能接近),並在新叢集中受支援。 AWS Backup 將在 EKS 版本之間執行盡最大努力還原,但在還原顯著不同的版本時可能會出現相容性問題。

  3. 相符的儲存類別:對於還原至現有 EKS 叢集,請確保在還原之前已安裝適當的 CSI Storage Driver 附加元件

  4. S3 儲存貯體:使用 S3 儲存貯體還原 EKS 叢集時,請確定您的 S3 儲存貯體已在目的地帳戶或區域中進行版本控制和存取。

  5. 映像儲存庫:還原 EKS 叢集時,請確保目的地 EKS 叢集的帳戶或區域可存取作為還原一部分所參考的映像。檢查您的登錄檔是否具有足夠的跨區域/帳戶政策許可。

  6. 安全群組:如果在還原過程中建立新的 EKS 叢集,則應針對目標帳戶和區域中的 ALB、Pod 身分、EKS 節點群組等預先建立安全群組

  7. EBS 可用區域和節點:復原 EBS 磁碟區的可用區域應對應至現有 EKS 節點的可用區域

  8. 非破壞性還原:所有 EKS 還原都是非破壞性,不會覆寫目標還原的 Kubernetes 物件。

  9. 啟用 EKS 稽核日誌:在還原之前啟用 EKS 稽核日誌以進行其他記錄和故障診斷。您也可以訂閱 SNS 通知,以在還原時通知略過或失敗的物件。

  10. 新的 EKS 叢集建立還原緩衝區:在還原期間建立新的 EKS 叢集時, 會在 EKS 叢集達到可用狀態後但在建立任何其他 EKS 資源之前 AWS Backup 引入 15 分鐘緩衝區。此緩衝區可確保在建立相依資源之前,所有基礎 EKS 元件都會完全初始化。

  11. 啟動範本中的使用者資料:使用啟動範本建立節點群組時,請勿在啟動範本的使用者資料區段spec.cluster中指定 。Amazon EKS 會自動注入叢集身分參數 (apiServerEndpoint、 和 serviceIpv4Cidr)certificateAuthority,並將其與使用者資料中定義的任何其他組態合併。

EKS 組態

當您還原複合 Amazon 時 AWS Backup,您可以選擇還原類型和目標目的地。您可以選擇還原至來源 EKS 叢集、現有的 EKS 叢集,或建立新的 EKS 叢集做為還原目標。對於新的 EKS 叢集,您可以選擇使用與備份叢集相同的現有基礎設施設定 (例如 VPC、子網路),或設定新的基礎設施設定。 AWS Backup 旨在執行不會覆寫現有資源的非破壞性還原。

對於命名空間還原,您最多可以指定 5 個命名空間來選擇性地還原。只會還原命名空間範圍的資源,而排除叢集範圍的資源,但相關的持久性磁碟區除外。

作為進階設定,您可以選擇變更 Kubernetes 物件的還原順序。根據預設, AWS Backup 會依下列順序還原所有 Kubernetes 物件:

叢集範圍的 Kubernetes 資源

  1. 自訂資源定義

  2. 命名空間 (命名空間本身,而非該命名空間內的資源)

  3. StorageClasses

  4. PersistentVolumes

命名空間範圍 Kubernetes 資源

  1. PersistentVolumeClaims

  2. 私密

  3. ConfigMaps

  4. ServiceAccounts

  5. LimitRanges

  6. Pod

  7. ReplicaSets

持久性儲存組態

作為複合 Amazon EKS 備份還原的一部分,第二個步驟是設定您的持久性儲存組態。這會根據作為 EKS 叢集的一部分備份的持久性儲存而有所不同。

對於 Amazon EBS 快照,您需要提供可用區域,其中將還原和建立 Amazon EBS 磁碟區。 接著 AWS Backup 會嘗試在所選相同可用區域中建立 EKS Pod,以便將磁碟區重新掛載到 EKS 叢集,作為還原的一部分。

在還原過程中, AWS Backup 會將 Amazon EBS 磁碟區和 Amazon S3 儲存貯體重新掛載到還原的 EKS 叢集。Amazon EFS 檔案系統會還原至隨機字首,並在還原至 EKS 叢集後需要手動建立存取點。 AWS Backup 不會代表您建立存取點或掛載目標,請參閱此處有關存取點掛載目標的指引。

Amazon EKS 還原程序

請依照下列步驟,使用 AWS Backup 主控台或 還原 Amazon EKS 備份 AWS CLI:

Console
還原 Amazon EKS 叢集
  1. 在 https://https://console.aws.amazon.com/backup 開啟 AWS Backup 主控台。

  2. 在導覽窗格中,選擇 Backup vaults (備份文件庫)

  3. 選擇包含 Amazon EKS 備份的備份保存庫,然後選取 Amazon EKS 備份的復原點。

  4. 選擇 Restore (還原)。

  5. 還原選項窗格中,選擇您的還原類型:

    • 還原完整 EKS 叢集 - 還原整個 Amazon EKS 複合復原點

    • 選取要還原的命名空間 - 最多還原五個特定命名空間

  6. 設定目標目的地:

    • 針對叢集還原,選擇建立新的叢集或使用現有的叢集

    • 對於新叢集,請指定叢集名稱、Kubernetes 版本、VPC 組態、IAM 角色、子網路、其他安全群組、節點群組設定、遠端閘道設定檔和 Pod 身分 IAM 角色

    • 對於現有的叢集,請從下拉式清單中選取目標叢集

    • 對於命名空間還原,請指定目標叢集和命名空間名稱

  7. 或者,為 Kubernetes 資源的自訂還原順序設定進階設定。

  8. 選擇任務的 IAM 還原角色。如果未使用預設角色,請確定選取的角色包含 iam:PassRole 許可。

  9. 選擇 Restore backup (還原備份)

AWS CLI

使用 aws backup start-restore-job命令搭配 Amazon EKS 特定的中繼資料。

所需的中繼資料取決於您的還原類型。所有還原操作都需要 clusterName 參數。

透過 還原 Amazon EKS 復原點 AWS CLI

使用 StartRestoreJob。您可以在 Amazon EKS 還原期間指定下列中繼資料:

強制性中繼資料:

  • clusterName - 要還原至 的叢集名稱

選用中繼資料:

  • newCluster - (true/false) 如果我們應在還原期間建立新的 EKS 叢集。如果 newCluster 是「true」,則適用下列中繼資料欄位:

    • eksClusterVersion - 如果想要在還原期間增加叢集版本,則需要叢集的 K8s 版本

    • clusterRole - 要連接到已建立 EKS 叢集的 IAM 角色 ARN

    • encryptionConfigProviderKeyArn - 指定 KMS 金鑰 ARN 來加密目的地叢集。這可以是來源叢集中的 KMS 金鑰,也可以是不同的 KMS 金鑰。執行跨區域或跨帳戶還原時,必須提供不同的 KMS 金鑰。如果來源叢集未加密,請完全省略此中繼資料。

    • clusterVpcConfig - 已建立 EKS 叢集的 VPC/網路組態。此欄位具有下列巢狀欄位:

      • vpcId - 與您的叢集相關聯的 VPC

      • subnetIds [Required] - 與您的叢集相關聯的子網路

      • securityGroupIds [Required] - 與您的叢集相關聯的其他安全群組

    • nodeGroups - 要在 EKS 叢集上建立的受管節點群組。用於還原的 NodeGroups 必須具有來自備份時間的所有相同節點群組,並具有相符的 nodeGroupId。

      • nodeGroupId [Required] - 節點群組的 ID

      • subnetIds [Required] - 為與您的節點群組相關聯的 Auto Scaling 群組指定的子網路

      • instanceTypes - 如果節點群組未與啟動範本一起部署,則這是與節點群組相關聯的執行個體類型

      • nodeRole [Required] - 與您的節點群組相關聯的 IAM 角色

      • securityGroupIds - 允許 SSH 存取節點的安全群組 IDs

      • remoteAccessEc2SshKey - Amazon EC2 SSH 金鑰名稱,提供與受管節點群組中節點進行 SSH 通訊的存取權

      • launchTemplateId - 指定啟動範本 ID 以建立節點群組。這可以是來源叢集的啟動範本 ID,也可以是不同的啟動範本 ID。如果來源叢集的啟動範本包含指向來源叢集本身的硬式編碼端點,您必須提供不同的啟動範本 ID。如果來源叢集不使用啟動範本,請完全省略此中繼資料。

      • launchTemplateVersion - 與指定啟動範本 ID 相關聯的啟動範本版本。

    • fargateProfiles - 要在 EKS 叢集上建立的 Fargate 設定檔。用於還原的 Fargate 設定檔必須具有所有與備份時間相同的 Fargate 設定檔,並具有相符的名稱。

      • name [Required] - Fargate 設定檔的名稱

      • subnetIds - 要在其中啟動 Pod IDs

      • podExecutionRoleArn [Required] - Pod 執行角色的 IAM 角色 ARN,用於符合 Fargate 設定檔中選取器的 Pod

    • podIdentityAssociations - 要在 EKS 叢集上建立的 Pod 身分關聯

      • associationId - Pod Identity Association 的 ID

      • roleArn - Pod Identity Association 的 IAM 角色 ARN

  • kubernetesRestoreOrder - 覆寫還原 Kubernetes 資訊清單的順序。此順序將優先於預設的服務還原順序。這遵循格式:group/version/kind 或 version/kind

    例如: ["v1/persistentvolumes","v1/pods","customresource/v2/custom"]

  • namespaceLevelRestore - (true/false) 如果您想要執行命名空間層級還原

  • namespaces - 如果 namespaceLevelRestore 為「true」,則要還原的命名空間清單。最多可提供 5 個要還原的命名空間。

    例如: ["ns-1","ns-2","ns-3","ns-4","ns-5"]

  • restoreKubernetesManifestsOnly - (true/false) 如果您只想還原 Kubernetes 資訊清單檔案,而且沒有持久性儲存系統 (EBS、S3、EFS 等)

  • nestedRestoreJobs - 還原複合復原點中 PersistentVolume 儲存系統所有巢狀復原點的中繼資料組態。這是 RecoveryPointArn 的映射:該復原點的 RestoreMetadata

還原至現有叢集

aws backup start-restore-job \ --recovery-point-arn "arn:aws:backup:us-west-2:123456789012:recovery-point:composite:eks/my-cluster-20240115" \ --iam-role-arn "arn:aws:iam::123456789012:role/AWSBackupDefaultServiceRole" \ --metadata '{"clusterName":"existing-cluster","newCluster":"false"}' \ --resource-type "EKS"

將特定命名空間還原至現有叢集:

aws backup start-restore-job \ --recovery-point-arn "arn:aws:backup:us-west-2:123456789012:recovery-point:composite:eks/my-cluster-20240115" \ --iam-role-arn "arn:aws:iam::123456789012:role/AWSBackupDefaultServiceRole" \ --metadata '{"clusterName":"existing-cluster","newCluster":"false","namespaceLevelRestore":"true","namespaces":"[\"ns-1\",\"ns-2\",\"ns-3\",\"ns-4\",\"ns-5\"]"}' \ --resource-type "EKS"

將巢狀持久性磁碟區還原至現有叢集:

aws backup start-restore-job \ --recovery-point-arn "arn:aws:backup:us-west-2:123456789012:recovery-point:composite:eks/my-cluster-20240115" \ --iam-role-arn "arn:aws:iam::123456789012:role/AWSBackupDefaultServiceRole" \ --metadata '{"clusterName":"existing-cluster","newCluster":"false","namespaceLevelRestore":"true","nestedrestorejobs":"{\"arn:aws:ec2:us-west-2::snapshot/snap-abc123\":\"{\\\"AvailabilityZone\\\":\\\"us-west-2a\\\"}\",\"arn:aws:backup:us-west-2:123456789012:recovery-point:fa71a304-2555-4c37-8128-f154b9578032\":\"{\\\"DestinationBucketName\\\":\\\"bucket-name\\\"}\"}"}' \ --resource-type "EKS"

還原至新叢集

aws backup start-restore-job \ --recovery-point-arn "arn:aws:backup:us-west-2:123456789012:recovery-point:composite:eks/my-cluster-20240115" \ --iam-role-arn "arn:aws:iam::123456789012:role/AWSBackupDefaultServiceRole" \ --metadata '{"clusterName":"new-cluster","newCluster":"true","clusterRole":"arn:aws:iam::123456789012:role/EKSClusterRole","eksClusterVersion":"1.33","encryptionConfigProviderKeyArn":"arn:aws:kms:us-west-2:123456789012:key/ecb2b326-784d-4ec0-8d07-20ab826b5a13","clusterVpcConfig":"{\"vpcId\":\"vpc-1234\",\"subnetIds\":[\"subnet-1\",\"subnet-2\",\"subnet-3\"],\"securityGroupIds\":[\"sg-123\"]}","nodeGroups":"[{\"nodeGroupId\":\"nodegroup-1\",\"subnetIds\":[\"subnet-1\",\"subnet-2\",\"subnet-3\"],\"nodeRole\":\"arn:aws:iam::123456789012:role/EKSNodeGroupRole\",\"instanceTypes\":[\"t3.small\"],\"launchTemplateId\":\"lt-0b13949aae3f2b867\",\"launchTemplateVersion\":\"1\"}]","fargateProfiles":"[{\"name\":\"fargate-profile-1\",\"subnetIds\":[\"subnet-1\",\"subnet-2\",\"subnet-3\"],\"podExecutionRoleArn\":\"arn:aws:iam::123456789012:role/EKSFargateProfileRole\"}]"}' \ --resource-type "EKS"

開始還原任務後,請使用 describe-restore-job 監控進度:

aws backup describe-restore-job --restore-job-id restore-job-id

您可以訂閱失敗和略過物件的通知事件進行還原。如需詳細資訊,請參閱使用 通知選項 AWS Backup。

Amazon EKS 還原狀態訊息

當還原任務完成時,您可能會看到下列狀態訊息。資料表顯示可能的情況及其對應的任務狀態值:

案例 任務狀態 訊息範例
已成功還原所有物件 COMPLETED (已完成)
一或多個物件無法還原 COMPLETED (已完成) 「一或多個 Kubernetes 物件無法還原。若要收到這些失敗的通知,請啟用 SNS 事件通知。」
還原無法完成 失敗 (錯誤詳細資訊)

還原期間略過的物件

系統會盡力還原下列 Kubernetes 物件。如果無法還原,則會將其移至略過的清單。這些物件由 Kubernetes 或 Amazon EKS 系統管理並重新建立:

  • 具有apf.kubernetes.io/autoupdate-spec: "true"註釋的 FlowSchemas

  • PriorityLevelConfigurations 與apf.kubernetes.io/autoupdate-spec: "true"註釋

  • eks-exempt FlowSchema (EKS 受管,參考受保護的豁免 PriorityLevelConfiguration)

  • default 命名空間中的 kubernetes服務 (API 伺服器端點)

  • kube-system 命名空間中的 kube-dns服務 (CoreDNS)

還原期間一律會略過下列 Kubernetes 物件。這些物件包括節點基礎設施和聯網元件。它們參考叢集特定的狀態。當節點和服務在目標叢集中變為作用中時,Kubernetes 控制器會自動重新建立這些物件。如果您從備份還原這些物件,可能會導致衝突或錯誤。發生這些衝突是因為還原的物件參考目標叢集上不存在的資源。

  • 端點 (v1/endpoints) - 定義服務 IP 地址的網路端點。Endpoints 控制器會根據服務選擇器自動管理這些項目。

  • EndpointSlices (discovery.k8s.io/v1/endpointslices) - EndpointSlice 控制器會自動管理這些物件。

  • IPAddresses (networking.k8s.io/v1/ipaddresses) - Kubernetes 聯網會管理這些叢集內部 IP 配置。

  • CSINodes (storage.k8s.io/v1/csinodes) - 當 CSI 驅動程式在節點上註冊時,kubelet 會自動建立這些物件。

  • VolumeAttachments (storage.k8s.io/v1/volumeattachments) - 當 Pod 需要磁碟區時, attach/detach 控制器會自動建立這些物件。

目標叢集上已存在的物件也會略過。EKS 還原是非破壞性的 — 不會覆寫或刪除現有的物件。

若要在還原期間接收有關略過或失敗物件的通知,請訂閱 SNS 事件通知。如需詳細資訊,請參閱使用 通知選項 AWS Backup

跨叢集還原的 OIDC 和 IRSA 考量事項

將 Amazon EKS 備份還原至與來源不同的叢集時,參考服務帳戶 IAM 角色 (IRSA) 的 Kubernetes 物件會保留來源叢集的 OIDC 供應商端點。這些參考存在於服務帳戶註釋和 IAM 信任政策中。 AWS Backup 不會在還原期間自動更新它們。

如果您的工作負載使用 IRSA,跨叢集還原需要:

  • 目的地叢集必須設定 OIDC 提供者。

  • Kubernetes 服務帳戶參考的所有 IAM 角色都必須更新其信任政策,以包含目的地叢集的 OIDC 提供者端點。

  • 服務帳戶註釋 (eks.amazonaws.com/role-arn) 仍會參考原始角色 — 驗證這些角色符合目的地帳戶中的有效角色。

如果未滿足這些相依性,則還原後 Pod 將無法擔任 IAM 角色,而且還原任務可能會在驗證期間報告失敗。

建議:對於需要跨叢集或跨帳戶還原可攜性的工作負載,我們建議您使用 EKS Pod Identity 而非 IRSA。EKS Pod Identity 不依賴叢集特定的 OIDC 供應商,並簡化跨叢集還原案例。