

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 删除集群
<a name="delete-cluster"></a>

使用完 Amazon EKS 集群后，应删除与其关联的资源，这样便不会产生任何不必要的费用。

您可以使用 `eksctl`、AWS 管理控制台或 AWS CLI 删除集群。

## 注意事项
<a name="_considerations"></a>
+ 如果您因为已删除集群创建者而收到错误，请参阅[这篇文章](https://aws.amazon.com/premiumsupport/knowledge-center/eks-api-server-unauthorized-error)解决。
+ 适用于 Prometheus 的 Amazon 托管服务资源不在集群生命周期内，需要独立于集群进行维护。删除集群时，请务必同时删除所有适用的抓取器以停止适用的费用。有关更多信息，请参阅*《Amazon Managed Service for Prometheus 用户指南》*中的[查找和删除抓取程序](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-list-delete)。
+ 要删除连接的集群，请参阅 [从 Amazon EKS 控制台注销 Kubernetes 集群](deregister-connected-cluster.md) 
+ 在删除集群之前，请先确保已禁用该集群的删除保护功能。

### EKS 自动模式注意事项
<a name="_considerations_for_eks_auto_mode"></a>
+ 所有 EKS 自动模式节点都将被删除，包括 EC2 托管式实例
+ 所有负载均衡器都将被删除

有关更多信息，请参阅 [禁用 EKS 自动模式](auto-disable.md)。

## 先决条件步骤
<a name="prerequisite-steps"></a>

以下是在删除集群之前您必须先执行的步骤。无论您采用何种方法来删除集群，这些步骤均适用。

1. 列出集群中运行的所有服务。

   ```
   kubectl get svc --all-namespaces
   ```

1. 删除具有关联的 `EXTERNAL-IP` 值的任何服务。这些服务的前面配置了一个 Elastic Load Balancing 负载均衡器，您必须从 Kubernetes 中将其删除才能释放负载均衡器和关联资源。请根据描述将 *service-name* 替换为所列每项服务的名称。

   ```
   kubectl delete svc service-name
   ```

1. 同时删除所有的入口资源。如果您不删除入口资源，则即使您删除了集群，应用程序负载均衡器仍会保留。将 *ingress-name* 替换为入口资源的名称。

   ```
   kubectl get ingress --all-namespaces
   ```

   ```
   kubectl delete ing ingress-name
   ```

## 删除集群（eksctl）
<a name="_delete_cluster_eksctl"></a>

此过程需要 `eksctl` 版本 `0.215.0` 或更高版本。可以使用以下命令来查看您的版本：

```
eksctl version
```

有关安装或升级 `eksctl` 的说明，请参阅 `eksctl` 文档中的 [Installation](https://eksctl.io/installation)。

1. 完成[先决条件步骤](#prerequisite-steps)。执行此操作后，使用以下命令（将 *prod* 替换为您的集群名称）删除集群及其关联的节点。

   ```
   eksctl delete cluster --name prod
   ```

   输出：

   ```
   [ℹ]  using region region-code
   [ℹ]  deleting EKS cluster "prod"
   [ℹ]  will delete stack "eksctl-prod-nodegroup-standard-nodes"
   [ℹ]  waiting for stack "eksctl-prod-nodegroup-standard-nodes" to get deleted
   [ℹ]  will delete stack "eksctl-prod-cluster"
   [✔]  the following EKS cluster resource(s) for "prod" will be deleted: cluster. If in doubt, check CloudFormation console
   ```

## 删除集群（AWS 控制台）
<a name="delete_cluster_shared_aws_console"></a>

1. 完成[先决条件步骤](#prerequisite-steps)。执行此操作后，删除所有节点组和 Fargate 配置文件。

   1. 打开 [Amazon EKS 控制台](https://console.aws.amazon.com/eks/home#/clusters)。

   1. 请在左侧导航窗格中，选择 Amazon EKS **Clusters**（集群），然后在集群的选项卡列表中，选择要删除的集群的名称。

   1. 选择 **Compute**（计算）选项卡，然后选择要删除的节点组。选择 **Delete**（删除），输入节点组的名称，然后选择 **Delete**（删除）。删除集群中的所有节点组。
**注意**  
只会列出[托管节点组](managed-node-groups.md)。

   1. 选择要删除的 **Fargate Profile**（Fargate 配置文件），选择 **Delete**（删除），输入配置文件的名称，然后选择 **Delete**（删除）。删除集群中的所有 Fargate 配置文件。

1. 删除所有[自主管理的节点 AWS CloudFormation 堆栈](https://docs.aws.amazon.com/eks/latest/userguide/worker)。

   1. 打开 [AWS CloudFormation 控制台](https://console.aws.amazon.com/cloudformation/)。

   1. 请选择要删除的节点堆栈，然后选择 **Delete**（删除）。

   1. 在 **Delete stack**（删除堆栈）确认对话框中，请选择 **Delete stack**（删除堆栈）。删除集群中的所有自行管理的节点堆栈。

1. 请删除集群。

   1. 打开 [Amazon EKS 控制台](https://console.aws.amazon.com/eks/home#/clusters)。

   1. 选择要删除的集群并选择 **Delete**（删除）。

   1. 在删除集群确认屏幕上，选择 **Delete (删除)**。

1. （可选）删除 VPC AWS CloudFormation 堆栈。

   1. 打开 [AWS CloudFormation 控制台](https://console.aws.amazon.com/cloudformation/)。

   1. 请选择要删除的 VPC 堆栈，然后选择 **Delete**（删除）。

   1. 在 **Delete stack**（删除堆栈）确认对话框中，请选择 **Delete stack**（删除堆栈）。

## 删除集群（AWS CLI）
<a name="delete_cluster_shared_aws_cli"></a>

1. 完成[先决条件步骤](#prerequisite-steps)。执行此操作后，删除所有节点组和 Fargate 配置文件。

   1. 使用以下命令列出集群中的节点组。

      ```
      aws eks list-nodegroups --cluster-name my-cluster
      ```
**注意**  
只会列出[托管节点组](managed-node-groups.md)。

   1. 使用以下命令删除每个节点组。删除集群中的所有节点组。

      ```
      aws eks delete-nodegroup --nodegroup-name my-nodegroup --cluster-name my-cluster
      ```

   1. 使用以下命令列出集群中的 Fargate 配置文件。

      ```
      aws eks list-fargate-profiles --cluster-name my-cluster
      ```

   1. 使用以下命令删除每个 Fargate 配置文件。删除集群中的所有 Fargate 配置文件。

      ```
      aws eks delete-fargate-profile --fargate-profile-name my-fargate-profile --cluster-name my-cluster
      ```

1. 删除所有[自主管理的节点 AWS CloudFormation 堆栈](https://docs.aws.amazon.com/eks/latest/userguide/worker)。

   1. 使用以下命令列出您的可用 AWS CloudFormation 堆栈。在生成的输出中查找节点模板名称。

      ```
      aws cloudformation list-stacks --query "StackSummaries[].StackName"
      ```

   1. 使用以下命令（将 *node-stack* 替换为节点堆栈名称）删除每个节点堆栈。删除集群中的所有自行管理的节点堆栈。

      ```
      aws cloudformation delete-stack --stack-name node-stack
      ```

1. 使用以下命令删除集群，同时将 *my-cluster* 替换为您的集群名称。

   ```
   aws eks delete-cluster --name my-cluster
   ```

1. （可选）删除 VPC AWS CloudFormation 堆栈。

   1. 使用以下命令列出您的可用 AWS CloudFormation 堆栈。在生成的输出中查找 VPC 模板名称。

      ```
      aws cloudformation list-stacks --query "StackSummaries[].StackName"
      ```

   1. 使用以下命令删除 VPC 堆栈，同时将 *my-vpc-stack* 替换为您的 VPC 堆栈名称。

      ```
      aws cloudformation delete-stack --stack-name my-vpc-stack
      ```

# 防止意外删除 EKS 集群
<a name="deletion-protection"></a>

意外删除 EKS 集群可能会影响 Kubernetes 集群的正常运行。

现在，您可以防止意外删除 EKS 集群。如果在集群上启用了删除保护，必须先禁用删除保护，然后才能删除该集群。

删除保护的目的是防止意外操作。您应谨慎限制有权删除集群的人员。

如果您尝试删除已启用删除保护的活动集群，将收到 `InvalidRequestException`。

**重要**  
如果您在集群上启用了删除保护，则必须**同时**拥有 UpdateClusterConfig 和 DeleteCluster IAM 权限才能先移除删除保护，并最终删除该集群。

**注意**  
如果集群状态为正在创建、失败或正在删除，即使已启用删除保护，您仍可以删除该集群。

## 为现有集群启用删除保护
<a name="_to_enable_deletion_protection_for_an_existing_cluster"></a>

您只能在处于活动状态的集群上运行此命令。

```
aws eks update-cluster-config --name <cluster-name> --region <aws-region> --deletion-protection
```

## 为现有集群禁用删除保护
<a name="_to_disable_deletion_protection_for_an_existing_cluster"></a>

```
aws eks update-cluster-config --name <cluster-name> --region <aws-region> --no-deletion-protection
```