クラスターの作成が失敗した際に、eksctl を使用せずに EKS Anywhere のリソースをクリーンアップする方法を教えてください。
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" が見つかりません」
関連するコンテンツ
- 質問済み 22日前lg...
- AWS公式更新しました 1年前
- AWS公式更新しました 1年前