本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
恢复 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 创建新的
恢复 Amazon EKS 的功能
| 还原类型 | 还原目标 | 恢复行为 |
|---|---|---|
| 恢复现有集群 | 恢复到源 EKS 集群或现有 EKS 集群 | 将所有 Kubernetes 资源和永久卷恢复到现有的 EKS 集群。所有恢复都是非破坏性的,现有对象不会被覆盖。对于跳过的对象,您可以订阅 SNS 通知 |
| 新集群恢复 | 在 EKS 还原过程中创建一个新的 Amazon EKS 集群 | 还原会创建新的 EKS 集群并将所有 Kubernetes 资源和永久卷恢复到新创建的集群 |
| 命名空间恢复 | 现有的亚马逊 EKS 集群 | 仅恢复指定的命名空间,其 Kubernetes 资源和相应的持久存储恢复是非破坏性的,不会覆盖现有对象。对于跳过的对象,您可以订阅 SNS 通知 |
| 永久存储恢复 | 依赖于永久存储 | 将单个永久存储器恢复为独立还原。请参阅亚马逊 EBS、亚马逊 S3 、亚马逊 EF S 的还原行为。 |
权限
所需的权限取决于还原类型和目标目标。
-
AWS Backup的托管策略AWSBackupServiceRolePolicyForRestores包含恢复您的亚马逊 EKS 集群以及 EBS 和 EFS 永久存储所需的权限。
-
如果您的 EKS 集群包含 S3 存储桶,或者您正在单独恢复子 S3 恢复点,则需要确保为您的角色分配以下策略或权限AWSBackupServiceRolePolicyForS3Restore。
恢复之前的注意事项
在开始 EKS 恢复任务之前,请查看以下内容。如果您要恢复已跨账户或区域复制的 EKS 备份,请务必在还原之前检查这些注意事项,以防止还原失败。
-
IAM 角色:恢复到其他集群时,源集群中使用的 IAM 角色(例如 Pod 身份、IRSA。OIDC 提供商配置(等)必须作为目标集群存在于账户/区域中。
-
确保 EKS 版本和兼容性:您要恢复的对象的 API 版本应与新集群相同(或尽可能接近)并受支持。 AWS Backup 将尽最大努力在 EKS 版本之间进行恢复,但在明显不同的版本之间恢复时可能会出现兼容性问题。
-
匹配存储类别:要恢复现有 EKS 集群,请确保在还原之前安装了相应的 CSI 存储驱动程序插件
-
S3 存储桶:使用 S3 存储桶恢复 EKS 集群时,请确保您的 S3 存储桶受版本控制,可在目标账户或区域中访问。
-
镜像存储库:恢复 EKS 集群时,请确保目标 EKS 集群的账户或区域有权访问在还原过程中引用的镜像。检查您的注册表是否具有足够的跨区域/账户政策权限。
-
安全组:如果在还原过程中创建新的 EKS 集群,则应为目标账户和区域中的 ALB、Pod 身份、EKS 节点组等预先创建安全组
-
EBS 可用区域和节点:您恢复 EBS 卷的可用区域应映射到现有 EKS 节点的可用区
-
Non-destructive 恢复:所有 EKS 还原都将是非破坏性的,不会覆盖目标恢复的 Kubernetes 对象。
-
启用 EKS 审核日志:启用 EKS 审核日志,以便在还原之前进行更多记录和故障排除。您还可以订阅 SNS 通知,在还原时通知已跳过或失败的对象。
-
新的 EKS 集群创建还原缓冲区:在还原期间创建新的 EKS 集群时,在 EKS 集群达到可用状态之后但在创建任何其他 EKS 资源之前,会 AWS Backup 引入 15 分钟的缓冲区。该缓冲区可确保在创建依赖资源之前完全初始化所有底层 EKS 组件。
-
启动模板中的用户数据:使用启动模板创建节点组时,请勿
spec.cluster在启动模板的用户数据部分中指定。Amazon EKS 会自动注入集群身份参数(apiServerEndpointcertificateAuthority、和serviceIpv4Cidr),并将它们与用户数据中定义的任何其他配置合并。
EKS 配置
当您还原复合亚马逊时 AWS Backup,您可以选择还原类型和目标目的地。您可以选择恢复到源 EKS 集群、现有 EKS 集群或创建新的 EKS 集群作为还原目标。对于新的 EKS 集群,您可以选择使用与备份集群相同的现有基础设施设置(例如 VPC、子网)或配置新的基础设施设置。 AWS Backup 旨在执行不覆盖现有资源的非破坏性恢复。
对于命名空间恢复,您可以选择性地指定最多 5 个命名空间进行还原。仅恢复命名空间范围内的资源,而集群范围内的资源不包括在内,相关的永久卷除外。
作为高级设置,你可以选择更改 Kubernetes 对象的还原顺序。默认情况下, AWS Backup 将按以下顺序恢复所有 Kubernetes 对象:
集群范围的 Kubernetes 资源
-
自定义资源定义
-
命名空间(命名空间本身,而不是该命名空间中的资源)
-
StorageClasses
-
PersistentVolumes
命名空间范围的 Kubernetes 资源
-
PersistentVolumeClaims
-
密文
-
ConfigMaps
-
ServiceAccounts
-
LimitRanges
-
容器组(pod)
-
ReplicaSets
永久存储配置
作为复合 Amazon EKS 备份还原的一部分,第二步将是配置您的永久存储配置。这将根据作为 EKS 集群的一部分备份的永久存储而有所不同。
对于亚马逊 EBS 快照,您需要提供一个可用区,用于恢复和创建 Amazon EBS 卷。 AWS Backup 然后,将尝试在所选的相同可用区域中创建 EKS 容器,以便在还原过程中可以将您的卷重新安装到 EKS 集群中。
作为还原的一部分, AWS Backup 会将您的 Amazon EBS 卷和 Amazon S3 存储桶重新安装到还原的 EKS 集群中。Amazon EFS 文件系统恢复为随机前缀,还原后需要手动创建接入点才能重新挂载到 EKS 集群。 AWS Backup 不代表您创建接入点或挂载目标,请参阅此处的接入点和挂载目标指南。
亚马逊 EKS 恢复程序
按照以下步骤使用 AWS Backup 控制台恢复 Amazon EKS 备份,或者 AWS CLI:
您可以为失败和跳过的对象订阅通知事件以进行恢复。有关更多信息,请参阅的通知选项 AWS Backup。
亚马逊 EKS 恢复状态消息
还原任务完成后,您可能会看到以下状态消息。该表显示了可能的场景及其相应的任务状态值:
| 场景 | 作业状态 | 示例消息 |
|---|---|---|
| 所有对象均已成功恢复 | COMPLETED | — |
| 一个或多个对象无法恢复 | COMPLETED | “一个或多个 Kubernetes 对象无法恢复。要获得有关这些失败的通知,请启用 SNS 事件通知。” |
| 还原无法完成 | FAILED | (错误详情) |
恢复期间跳过的对象
以下 Kubernetes 对象是在尽力而为的基础上恢复的。如果它们无法恢复,则会将其移至跳过的列表。这些对象由系统管理,由 Kubernetes 或亚马逊 EKS 重新创建:
-
FlowSchemas 带
apf.kubernetes.io/autoupdate-spec: "true"注解 -
PriorityLevelConfigurations 带
apf.kubernetes.io/autoupdate-spec: "true"注解 -
eks-exemptFlowSchema (EKS-managed,引用受保护的豁免 PriorityLevelConfiguration) -
default命名空间中的kubernetes服务(API 服务器端点) -
kube-system命名空间中的kube-dns服务 (CoreDNS)
在还原期间,将始终跳过以下 Kubernetes 对象。这些对象包括节点基础架构和网络组件。它们引用特定集群的状态。当目标集群中的节点和服务处于活动状态时,Kubernetes 控制器会自动重新创建这些对象。如果您从备份中恢复这些对象,它们可能会导致冲突或错误。之所以发生这些冲突,是因为还原的对象引用了目标集群上不存在的资源。
-
终端节点 (
v1/endpoints)-为服务定义 IP 地址的网络端点。端点控制器会根据服务选择器自动对其进行管理。 -
EndpointSlices (
discovery.k8s.io/v1/endpointslices)- EndpointSlice 控制器自动管理这些对象。 -
IP 地址 (
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 提供商,可简化跨集群还原方案。