클러스터 생성 실패 시, eksctl 없이 EKS Anywhere 리소스를 정리하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) Anywhere 클러스터가 생성 프로세스에 실패하여 리소스를 수동으로 정리하고 싶습니다.

간략한 설명

Amazon EKS Anywhere 클러스터를 생성하려고 하면, 여러 가지 이유로 인해 클러스터 생성에 실패할 수 있습니다. 클러스터 생성이 완료되지 않으면 컴퓨터에 원치 않는 리소스가 남아 있을 수 있습니다. eksctl을 사용하여 이러한 리소스를 제거할 수 없는 경우, 수동으로 리소스를 제거할 수 있습니다.

EKS Anywhere 클러스터 생성 시, 프로세스는 관리 컴퓨터에 부트스트랩 클러스터도 생성합니다. 이 부트스트랩 클러스터는 Kubernetes in Docker(KinD) 클러스터이며, 이를 통해 EKS Anywhere 클러스터를 쉽게 만들 수 있습니다. 이 KinD 클러스터를 정리하려면 KinD 컨테이너를 중지하고 KinD 컨테이너 이미지를 제거하세요. 이 워크플로는 Docker를 공급자로 사용하는 리소스를 성공적으로 정리합니다. 다른 공급자의 경우, 컨트롤 플레인 및 노드의 가상 머신에서 추가 단계를 완료해야 합니다.

해결 방법

관리 시스템에서 리소스 정리(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 Cluster API를 사용하여 Kubernetes 클러스터의 구성 요소를 프로비저닝합니다. 생성 프로세스 중에 생성된 VM이 하나라도 생성에 실패하면 이러한 VM을 수동으로 정리해야 합니다.

별도의 관리 클러스터를 사용하거나 관리 클러스터 없이 EKS Anywhere 클러스터를 만들고 관리할 수 있습니다. 베어 메탈 클러스터는 별도의 관리 클러스터를 지원하지 않습니다. 베어 메탈 클러스터를 사용하는 경우, 관리 클러스터 없는 클러스터 섹션을 참조하세요.

VM을 정리하려면 다음과 같이 귀하의 클러스터 설정에 따라 관련 단계를 따르세요.

관리 클러스터 없는 클러스터

별도의 관리 클러스터가 없는 클러스터의 경우, 전원을 끄고 모든 워커 노드, 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 리소스를 프로비저닝하기 전에 해당 클러스터 생성이 실패하는 경우, 다음과 같은 오류가 표시됩니다.

"Error from server (NotFound): clusters.anywhere.eks.amazonaws.com "WORKLOAD_CLUSTER_NAME" not found"

AWS 공식
AWS 공식업데이트됨 일 년 전