集群创建失败时如何清理没有 eksctl 的 EKS Anywhere 资源?

2 分钟阅读
0

我的 Amazon Elastic Kubernetes Service(Amazon EKS)Anywhere 集群的创建过程失败,我想手动清理资源。

简短描述

当您尝试创建 Amazon EKS Anywhere 集群时,创建可能会因为各种原因失败。未完成的集群创建可能会在您的计算机上保留一些不需要的资源。如果您无法使用 eksctl 删除这些资源,可以手动删除。

创建 EKS Anywhere 集群时,创建过程还会在管理计算机上创建引导集群。此引导集群是 Docker(KinD)集群中的 Kubernetes,它可以帮助创建 EKS Anywhere 集群。要清理此 KinD 集群,停止 KinD 容器并删除 KinD 容器映像。此工作流会成功清理使用 Docker 作为提供程序的资源。对于其他提供程序,您必须在控制平面和节点的虚拟机(VM)上完成其他步骤。

解决方法

清理管理计算机上的资源(适用于 Docker)

要清理保留在管理计算机上的资源,在所有用例中使用以下脚本。如果您使用 Docker 作为提供程序,此步骤会成功删除集群创建失败后剩余的所有不需要的资源。

由于 kind delete cluster 命令需要安装 KinD,因此此脚本不使用该命令。EKS Anywhere 使用临时容器中的 KinD 二进制文件来设置集群:

EKSA_CLUSTER_NAME="YOUR_CLUSTER_NAME"

# Clean up KIND Cluster Containers  
kind_container_ids=$(docker ps -a | grep "${EKSA_CLUSTER_NAME}" | awk -F ' ' '{print $1}')  
for container_id in $kind_container_ids; do echo "deleting container with id ${container_id}"; docker rm -f ${container_id}; done

# Clean up EKS-A tools Containers  
tools_container_ids=$(docker ps -a | grep "public.ecr.aws/eks-anywhere/cli-tools" | awk -F ' ' '{print $1}')  
for container_id in $tools_container_ids; do echo "deleting container with id ${container_id}"; docker rm -f ${container_id}; done  

# Delete All EKS-Anywhere Images  
image_ids=$(docker image ls | grep "public.ecr.aws/eks-anywhere/" | awk -F ' ' '{print $3}')  
for image_id in $image_ids; do echo "deleting image with id ${image_id}"; docker image rm ${image_id}; done

# Delete Auto-generated Cluster Folder  
rm $EKSA_CLUSTER_NAME -rf

**注意:**请将 YOUR_CLUSTER_NAME 替换为您的 EKS Anywhere 集群名称。

裸机、Nutanix、CloudStack 和 vSphere 操作步骤

EKS Anywhere 使用 Kubernetes 集群 API 来预配 Kubernetes 集群的组件。如果在创建过程中创建了任何 VM 但创建失败,您必须手动清理这些 VM。

您可以使用单独的管理集群创建和管理 EKS Anywhere 集群,也可以不使用。裸机集群不支持单独的管理集群。如果您使用裸机集群,请参阅无管理集群的集群部分。

要清理 VM,请根据您的集群设置执行相关步骤:

无管理集群的集群

对于没有单独管理集群的集群,请关闭并删除所有 Worker 节点、etcd VM 和 API 服务器。

**注意:**与 Nutanix、CloudStack 和 vSphere 集群关联的 VM 的名称通常以集群名称为前缀。

对于裸机集群,关闭并删除目标计算机。

有管理集群的集群

当您使用管理集群时,有一个单独的集群会监视您的工作负载集群的状态。如果属于工作负载集群的计算机关闭并终止,管理集群会检测到运行状况问题。然后,集群启动新的虚拟机,将工作负载集群恢复到所需状态。

因此,要清理有独立管理集群的集群,请从管理集群中删除代表工作负载集群的自定义资源(CRD)。这将删除特定工作负载集群的所有 VM。

**注意:**在以下命令中,请将 WORKLOAD_CLUSTER_NAME 替换为您要删除的工作负载集群。
请将 MANAGEMENT_CLUSTER_FOLDER 替换为 EKS Anywhere 为管理集群创建的文件夹。
请将 MANAGEMENT_CLUSTER_KUBECONFIG_FILE 替换为服务为管理集群生成的 kubeconfig 文件。kubeconfig 文件位于 MANAGEMENT_CLUSTER_FOLDER 中。

删除工作负载集群的集群 API 资源:

kubectl delete clusters.cluster.x-k8s.io -n eksa-system WORKLOAD_CLUSTER_NAME --kubeconfig MANAGEMENT_CLUSTER_FOLDER/MANAGEMENT_CLUSTER_KUBECONFIG_FILE

删除集群的 clusters.anywhere.eks.amazonaws.com 资源(如果存在):

kubectl delete clusters.anywhere.eks.amazonaws.com WORKLOAD_CLUSTER_NAME --kubeconfig MANAGEMENT_CLUSTER_FOLDER/MANAGEMENT_CLUSTER_KUBECONFIG_FILE

**注意:**如果在预配 clusters.anywhere.eks.amazonaws.com 资源之前集群创建失败,会出现以下错误:

“服务器 clusters.anywhere.eks.amazonaws.com 中出错(NotFound):未找到‘WORKLOAD_CLUSTER_NAME’”

AWS 官方
AWS 官方已更新 1 年前
没有评论