還原 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 資源和持久性磁碟區還原至新建立的 clsuter
命名空間還原 現有的 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 通知,以在還原時通知略過或失敗的物件。

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

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

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

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

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

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

        • nodeGroupId - 節點群組的 ID

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

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

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

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

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

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

        • name - Fargate 設定檔的名稱

        • subnetIds - 要在其中啟動 Pod IDs

        • podExecutionRoleArn - 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 個要還原的命名空間

  • 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/AWSBackupServiceRolePolicyForEKSRestore" \ --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/AWSBackupServiceRolePolicyForEKSRestore" \ --metadata '{"clusterName":"new-cluster","newCluster":true,"clusterRole":"arn:aws:iam::123456789012:role/EKSClusterRole","eksClusterVersion":"1.33","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\"]}]","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。