叢集建立失敗時,如何在沒有 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

**注意:使用您的 EKS Anywhere 叢集名稱,**取代 YOUR_CLUSTER_NAME

裸機、Nutanix、CloudStack 和 vSphere 的步驟

EKS 無處不在使用 Kubernetes 叢集 API 以佈建 Kubernetes 叢集的元件。如果在建立流程期間建立任何虛擬機器且建立失敗,則您必須手動清理這些虛擬機器。

您可以使用個別的管理叢集或不使用管理叢集以建立和管理 EKS Anywhere 叢集。裸機叢集不支援個別的管理叢集。如果您使用裸機叢集,請參閱不含管理叢集的叢集一節。

要清理虛擬機器,請依照叢集設定,執行相關步驟:

不含管理叢集的叢集

針對不含個別管理叢集的叢集,關閉並刪除所有工作節點、etcd 虛擬機器和 API 伺服器。

**注意:**與 Nutanix、CloudStack 和 vSphere 叢集相關的虛擬機器的名稱前置通常為叢集名稱。

針對裸機叢集,關閉電源並刪除目標電腦。

含管理叢集的叢集

使用管理叢集時,個別的叢集會監控工作負載叢集的狀態。如果屬於工作負載叢集的機器關閉電源並終止,則管理叢集會偵測到健全狀況問題。然後,叢集會啟動新的虛擬機器,讓工作負載叢集恢復到所需的狀態。

因此,要清理含個別管理叢集的叢集,從管理叢集,刪除代表工作負載叢集的自訂資源 (CRD)。這會刪除特定工作負載叢集的所有虛擬機器。

注意:在下列命令中,使用您要刪除的工作附載叢集,取代 WORKLOAD_CLUSTER_NAME
使用 EKS Anywhere 為管理叢群建立的資料夾,取代 MANAGEMENT_CLUSTER_FOLDER
使用服務為管理叢群產生的 kubeconfig 檔案,取代 MANAGEMENT_CLUSTER_KUBECONFIG_FILE。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,則您會收到下列錯誤︰

"Error from server (NotFound): clusters.anywhere.eks.amazonaws.com "WORKLOAD_CLUSTER_NAME" not found"(伺服器錯誤 (NotFound):clusters.anywhere.eks.amazonaws.com「WORKLOAD_CLUSTER_NAME」找不到)

AWS 官方
AWS 官方已更新 1 年前