当集群创建失败时,如何在没有 eksctl 的情况下清理 EKS Anywhere 资源?

2 分钟阅读
0

我的 Amazon Elastic Kubernetes Service(Amazon EKS)Anywhere 集群的创建过程失败。由于我无法使用 eksctl,因此我想手动清理我的资源。

简短描述

创建 EKS Anywhere 集群时,该过程还会在管理计算机上创建一个引导集群。此引导集群是 Docker(KinD)集群中的 Kubernetes,可帮助创建 EKS Anywhere 集群。要清理该 KinD 集群,请停止 KinD 容器并删除 KinD 容器映像。

对于其他提供程序,必须在控制平面和节点的虚拟机(VM)上完成其他步骤。

解决方法

清理 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 的资源

如果在创建过程中创建了任何 VM 但创建失败,则必须手动清理 VM。

如果使用单独的管理集群来创建和管理 EKS Anywhere 集群,请参阅以下有管理集群的集群部分。如果 EKS Anywhere 集群不支持单独的管理集群,请参阅以下无管理集群的集群部分。

无管理集群的集群

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

注意: 集群名称通常作为与 Nutanix、CloudStack 和 vSphere 集群关联的虚拟机名称的前缀。

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

有管理集群的集群

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

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

**注意:**在以下命令中,将 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 官方已更新 9 个月前