クラスターの作成が失敗した際に、eksctl を使用せずに EKS Anywhere のリソースをクリーンアップする方法を教えてください。

所要時間2分
0

Amazon Elastic Kubernetes Service (Amazon EKS) Anywhere クラスターの作成プロセスが失敗したため、リソースを手動でクリーンアップしたいと考えています。

簡単な説明

Amazon EKS Anywhere クラスターを作成しようとすると、さまざまな理由でクラスターの作成が失敗する可能性があります。クラスターの作成が完了していないと、マシンに不要なリソースが残る可能性があります。eksctl を使用してこれらのリソースを削除できない場合は、手動で削除できます。

EKS Anywhere クラスターを作成すると、管理マシンにブートストラップクラスターも作成されます。このブートストラップクラスターは Kubernetes in Docker (KinD) クラスターで、これを使用すると 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

注: YOUR_CLUSTER_NAME を EKS Anywhere のクラスター名に置き換えてください。

ベアメタル、Nutanix、CloudStack、vSphere の手順

EKS Anywhere では、Kubernetes Cluster API を使用して Kubernetes クラスターのコンポーネントをプロビジョニングします。作成プロセス中に仮想マシンが作成され、その作成が失敗した場合は、それらの 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 にあります。

ワークロードクラスターの Cluster 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 リソースがプロビジョニングされる前にクラスターの作成が失敗した場合、次のエラーが表示されます:

「サーバからのエラー(NotFound):clusters.anywhere.eks.amazonaws.com "WORKLOAD_CLUSTER_NAME" が見つかりません」

AWS公式
AWS公式更新しました 1年前