Comment nettoyer les ressources EKS Anywhere sans eksctl lorsque la création du cluster échoue ?

Lecture de 5 minute(s)
0

Le processus de création de mon cluster Amazon Elastic Kubernetes Service (Amazon EKS) Anywhere a échoué et je souhaite nettoyer manuellement mes ressources.

Brève description

Lorsque vous essayez de créer un cluster Amazon EKS Anywhere, la création du cluster peut échouer pour diverses raisons. La création d’un cluster inachevée peut conserver certaines ressources indésirables sur votre machine. Si vous ne pouvez pas utiliser eksctl pour supprimer ces ressources, vous pouvez les supprimer manuellement.

Lorsque vous créez un cluster EKS Anywhere, le processus crée également un cluster d’amorçage sur la machine administrative. Ce cluster bootstrap est un cluster Kubernetes in Docker (KinD) qui facilite la création du cluster EKS Anywhere. Pour nettoyer ce cluster KinD, arrêtez les conteneurs KinD et supprimez les images des conteneurs KinD. Ce flux de travail nettoie correctement les ressources qui utilisent Docker comme fournisseur. Pour les autres fournisseurs, vous devez effectuer des étapes supplémentaires sur les machines virtuelles (VM) pour le plan de contrôle et les nœuds.

Résolution

Nettoyer les ressources de la machine administrative (pour Docker)

Pour nettoyer les ressources qui restent sur la machine d’administration, utilisez le script suivant pour tous les cas d’utilisation. Si vous utilisez Docker comme fournisseur, cette étape supprime avec succès toutes les ressources indésirables qui restent suite à l’échec de la création du cluster.

Comme la commande kind delete cluster nécessite l’installation de KinD, ce script n’utilise pas la commande. EKS Anywhere utilise plutôt des fichiers binaires KinD provenant de conteneurs temporaires pour configurer des 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

Remarque : Remplacez YOUR_CLUSTER_NAME par le nom de votre cluster EKS Anywhere.

Étapes pour Bare Metal, Nutanix, CloudStack et vSphere

EKS Anywhere utilise l’API Kubernetes Cluster pour provisionner les composants du cluster Kubernetes. Si des machines virtuelles sont créées pendant le processus de création et que la création échoue, vous devez les nettoyer manuellement.

Vous pouvez créer et gérer des clusters EKS Anywhere avec un cluster de gestion distinct ou sans cluster de gestion. Les clusters Bare Metal ne prennent pas en charge un cluster de gestion distinct. Si vous utilisez des clusters Bare metal, consultez la section Cluster without management cluster (Cluster sans cluster de gestion).

Pour nettoyer vos machines virtuelles, suivez les étapes appropriées en fonction de la configuration de votre cluster :

Clusters without a management cluster (Clusters sans cluster de gestion)

Pour les clusters sans cluster de gestion distinct, mettez hors tension et supprimez tous les nœuds de travail, etc., les machines virtuelles et le serveur d’API.

Remarque : Les noms des machines virtuelles associées aux clusters Nutanix, CloudStack et vSphere sont généralement précédés du nom du cluster.

Pour les clusters Bare Metal, éteignez et supprimez les machines cibles.

Clusters with a management cluster (Clusters dotés d’un cluster de gestion)

Lorsque vous utilisez un cluster de gestion, un cluster distinct surveille l’état de votre cluster de charge de travail. Si une machine faisant partie du cluster de charge de travail s’éteint et s’arrête, le cluster de gestion détecte un problème de santé. Ensuite, le cluster fait tourner une nouvelle machine virtuelle pour ramener le cluster de charge de travail à l’état souhaité.

Par conséquent, pour nettoyer les clusters dotés de clusters de gestion distincts, supprimez les ressources personnalisées (CRD) qui représentent le cluster de charge de travail du cluster de gestion. Cela supprime toutes les machines virtuelles du cluster de charge de travail spécifique.

Remarque : Dans les commandes suivantes, remplacez WORKLOAD_CLUSTER_NAME par le cluster de charge de travail que vous souhaitez supprimer.
Remplacez MANAGEMENT_CLUSTER_FOLDER par le dossier créé par EKS Anywhere pour le cluster de gestion.
Remplacez MANAGEMENT_CLUSTER_KUBECONFIG_FILE par le fichier kubeconfig généré par le service pour le cluster de gestion. Le fichier kubeconfig se trouve dans le MANAGEMENT_CLUSTER_FOLDER.

Supprimez la ressource API Cluster pour le cluster de charge de travail :

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

Supprimez la ressource clusters.anywhere.eks.amazonaws.com du cluster, si elle existe :

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

Remarque : Si la création du cluster a échoué avant le provisionnement de la ressource clusters.anywhere.eks.amazonaws.com, l’erreur suivante s’affiche :

« Erreur du serveur (introuvable) : clusters.anywhere.eks.amazonaws.com « WORKLOAD_CLUSTER_NAME » introuvable »

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an