我无法删除 Amazon Elastic Kubernetes Service (Amazon EKS) 集群。如何解决此问题?
简短描述
要删除 Amazon EKS 集群,必须先删除与该集群关联的所有托管节点组。有关详细信息,请参阅删除 Amazon EKS 集群。
**注意:**最佳做法是使用创建集群时使用的相同工具删除集群。
**重要事项:**如果您使用 AWS 负载均衡器控制器(来自 GitHub 网站)创建负载均衡器,则会为您创建应用程序负载均衡器或网络负载均衡器。如果您在删除管理负载均衡器的 Kubernetes 入口或服务之前删除集群,则必须手动删除负载均衡器。请参阅删除应用程序负载均衡器、删除网络负载均衡器和删除负载均衡器(经典)。
如果您仍然无法删除集群组件,请根据您的场景,考虑以下选项:
- 您会收到错误消息“The following resource(s) failed to delete”或“resource XXXXXXX has a dependent object”。完成“删除创建集群组件的 AWS CloudFormation 堆栈”部分中的步骤。
- 您删除了集群,节点仍处于活动状态。删除集群不会自动删除自主管理型节点。必须手动删除节点。完成“删除自主管理型节点”部分中的步骤。
- 您的集群卡滞在 DELETING(正在删除)状态。确认没有缺失的 AWS Identity and Access Management (IAM) 策略或角色阻止您的集群删除。如果缺少 IAM 角色,请完成“为 Amazon EKS 重新创建 IAM 服务角色”部分中的步骤。
- Amazon EKS DeleteCluster API 调用失败并显示错误消息“Cannot delete because cluster XXXXXXX currently has an update in progress.” 但是,您会看到集群处于 Active(活动)状态,并且没有更新正在进行中。在这种情况下,请参阅“完成 Amazon EKS 自动平台版本升级”部分。
**注意:**删除集群需要时间是正常的。您无需为处于 DELETING(正在删除)状态的集群付费。
解决方法
**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您使用的是最新版本的 AWS CLI。
删除创建集群组件的 AWS CloudFormation 堆栈
1.您可以在 AWS CloudFormation 控制台上删除堆栈。或者,您可以使用 AWS CLI delete-stack 命令。
如果由于依赖项而无法删除堆栈,请先手动删除具有依赖项的资源,或者移除依赖项。然后,尝试再次删除堆栈。
要保留未能删除的资源,请在删除堆栈时跳过这些资源。此选项仅适用于处于 DELETE_FAILED 状态的资源或堆栈。跳过的资源在账户中保持活动状态,但 CloudFormation 堆栈已删除。然后,您可以通过 AWS 管理控制台删除资源。
2.删除堆栈后,再次尝试删除您的集群。
如果堆栈删除速度慢或删除失败,请查看 AWS CloudTrail 中的 DeleteCluster API 调用。
删除自主管理型节点
如果您手动创建了 Amazon Elastic Compute Cloud (Amazon EC2) 实例,请终止您的实例。如果您通过自动扩缩组创建了节点,请删除自动扩缩组以删除这些节点。如果您使用 CloudFormation 创建了节点,请删除堆栈以删除这些节点。
重新创建 Amazon EKS 的 IAM 服务角色
您必须拥有允许 Amazon EKS 为您调用其他 AWS 服务的 IAM 服务角色。如果您在创建集群后删除或修改角色,则集群无法删除某些资源。例如,集群可能不会删除用于与控制面板实例进行私有通信的弹性网络接口。
1.再次创建 IAM 角色。
**重要事项:**确保选择 Amazon EKS 作为为您管理集群的服务。
2.将 AmazonEKSClusterPolicy 托管策略附加到 IAM 角色。
完成 Amazon EKS 自动平台版本升级
Amazon EKS 会自动将所有现有集群升级到相应的 Kubernetes 次要版本的最新 Amazon EKS 平台版本。由于这些更新不是由您发起的,因此它们不会作为更新出现在控制台中。现有 Amazon EKS 平台版本的自动升级将逐步推出,可能需要一些时间才能完成。当您的集群处于相应的 Kubernetes 次要版本的最新平台版本后,您可以重试删除集群。