Como limpar os recursos do EKS Anywhere sem o eksctl quando a criação do cluster falha?

4 minuto de leitura
0

Meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS) Anywhere falhou no processo de criação e eu quero limpar meus recursos manualmente.

Breve descrição

Quando você tenta criar um cluster do Amazon EKS Anywhere, a criação do cluster pode falhar por vários motivos. Uma criação de cluster inacabada pode manter alguns recursos indesejados em sua máquina. Se você não puder usar o eksctl para remover esses recursos, poderá removê-los manualmente.

Quando você cria um cluster do EKS Anywhere, o processo também cria um cluster de bootstrap na máquina administrativa. Esse cluster de bootstrap é um cluster do Kubernetes in Docker (KinD) e facilita a criação do cluster do EKS Anywhere. Para limpar esse cluster do KinD, interrompa os contêineres do KinD e remova as imagens do contêiner do KinD. Esse fluxo de trabalho limpa com êxito os recursos que usam o Docker como provedor. Para outros provedores, você deve concluir etapas adicionais nas máquinas virtuais (VMs) do plano de controle e dos nós.

Resolução

Limpe os recursos na máquina administrativa (para o Docker)

Para limpar os recursos que permanecem na máquina administrativa, use o script a seguir para todos os casos de uso. Se você usar o Docker como seu provedor, essa etapa removerá com êxito todos os recursos indesejados que restaram da falha na criação do cluster.

Como o comando kind delete cluster requer a instalação do KinD, esse script não usa o comando. Em vez disso, o EKS Anywhere usa binários do KinD de contêineres temporários para configurar clusters:

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

Observação: substitua YOUR_CLUSTER_NAME pelo nome do cluster do EKS Anywhere.

Etapas para Bare Metal, Nutanix, CloudStack e vSphere

O EKS Anywhere usa a API Kubernetes Cluster para provisionar os componentes do cluster do Kubernetes. Se alguma VM for criada durante o processo de criação e a criação falhar, você deverá limpar essas VMs manualmente.

Você pode criar e gerenciar clusters do EKS Anywhere com um cluster de gerenciamento separado ou sem um cluster de gerenciamento. Os clusters bare metal não oferecem suporte a um cluster de gerenciamento separado. Se você usa clusters Bare Metal, consulte a seção Cluster sem cluster de gerenciamento.

Para limpar suas VMs, siga as etapas relevantes, dependendo da configuração do cluster:

Clusters sem um cluster de gerenciamento

Para clusters sem um cluster de gerenciamento separado, desligue e exclua todos os nós de processamento, as VMs etcd e o servidor da API.

Observação: as VMs associadas aos clusters Nutanix, CloudStack e vSphere geralmente têm seus nomes prefixados com o nome do cluster.

Para clusters bare metal, desligue e exclua as máquinas de destino.

Clusters com um cluster de gerenciamento

Quando você usa um cluster de gerenciamento, um cluster separado monitora o estado do seu cluster de carga de trabalho. Se uma máquina que faz parte do cluster de carga de trabalho for desligada e encerrada, o cluster de gerenciamento detectará um problema de integridade. Em seguida, o cluster ativa uma nova máquina virtual para trazer o cluster de carga de trabalho de volta ao estado desejado.

Portanto, para limpar clusters com clusters de gerenciamento separados, exclua os Recursos Personalizados (CRDs) que representam o cluster de carga de trabalho do cluster de gerenciamento. Isso exclui todas as VMs do cluster de carga de trabalho específico.

Observação: nos comandos a seguir, substitua WORKLOAD_CLUSTER_NAME pelo cluster da carga de trabalho que você deseja excluir.
Substitua MANAGEMENT_CLUSTER_FOLDER pela pasta que o EKS Anywhere criou para o cluster de gerenciamento.
Substitua MANAGEMENT_CLUSTER_KUBECONFIG_FILE pelo arquivo kubeconfig gerado pelo serviço para o cluster de gerenciamento. O arquivo kubeconfig está na MANAGEMENT_CLUSTER_FOLDER.

Exclua o recurso da API de cluster do cluster de carga de trabalho:

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

Exclua o recurso clusters.anywhere.eks.amazonaws.com do cluster, se ele existir:

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

Observação: se a criação do cluster falhar antes do provisionamento do recurso clusters.anywhere.eks.amazonaws.com, você receberá o seguinte erro:

"Erro do servidor (NotFound): clusters.anywhere.eks.amazonaws.com "WORKLOAD_CLUSTER_NAME" não encontrado"

AWS OFICIAL
AWS OFICIALAtualizada há um ano