Amazon EKS クラスターのリソースを削除できない理由を知りたいです。
Amazon Elastic Kubernetes サービス (Amazon EKS) クラスターからリソースを削除できません。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
Terminating 状態に留まっている Amazon EKS リソースに応じて、次のトラブルシューティングアクションを実行します。ファイナライザーはコントローラにリソースを削除するよう警告し、意図しない削除を防ぎます。リソースが Terminating 状態から変化しない場合は、そのリソースを削除する前にファイナライザーを削除する必要があります。ファイナライザーの詳細については、Kubernetes のウェブサイトで「ファイナライザー」を参照してください。
名前空間の削除に関する問題のトラブルシューティング
名前空間内に Terminating 状態から変化しないリソースがあるかどうかを確認するには、次のコマンドを実行します。
kubectl get all -n namespace-name | grep Terminating
注: namespace-name を実際の名前空間名に置き換えます。
リソースを手動で削除する場合は、次のコマンドを実行します。
kubectl delete resource resource-name -n namespace-name
注: 実際のものでそれぞれ、resource をリソースタイプに、resource-name をリソース名に、namespace-name を名前空間に置き換えます。
ファイナライザーまたは API サービスでエラーが発生していないか確認するには、次のコマンドを実行します。
kubectl get ns namespace-name -o json
注: namespace-name を実際の名前空間名に置き換えます。
コマンドの出力でエラーが表示された場合は、「Amazon EKS クラスターにおいて、terminated 状態の名前空間をトラブルシューティングする方法を教えてください」を参照してください。
イングレス削除に関する問題のトラブルシューティング
イングレスリソースに関連付けられているロードバランサーまたはターゲットグループを削除します。
イングレスリソースからファイナライザーを削除するには、次のコマンドを実行します。
kubectl patch ingress ingress-name -n namespace-name -p '{"metadata":{"finalizers":[]}}' --type=merge
注: 実際のものでそれぞれ、ingress-name をイングレス名に、namespace-name を名前空間に置き換えます。
次に、以下のコマンドを実行してイングレスリソースを削除します。
kubectl delete ingress ingress-name -n namespace-name
注: 実際のものでそれぞれ、ingress-name をイングレス名に、namespace-name を名前空間に置き換えます。
サービス削除に関する問題のトラブルシューティング
ファイナライザーをサービスリソースから削除するには、次のコマンドを実行します。
kubectl patch svc service-name -n namespace-name -p '{"metadata":{"finalizers":[]}}' --type=merge
注: 実際のものでそれぞれ、service-name をサービス名に、namespace-name を名前空間に置き換えます。
Amazon EC2 コンソールを使用して、サービスに関連付けられているロードバランサーの削除保護を無効にします。または、service.beta.kubernetes.io/aws-load-balancer-attributes というアノテーションを使用して削除保護を無効にします。詳細については、Kubernetes のウェブサイトで「リソースの属性」を参照してください。
次のコマンドを実行してサービスを削除します。
kubectl delete svc service-name -n namespace-name
注: 実際のものでそれぞれ、service-name をサービス名に、namespace-name を名前空間に置き換えます。
PV と PVC の削除に関する問題のトラブルシューティング
PersistentVolume (PV) または PersistentVolumeClaim (PVC) を削除できない場合は、次の問題がないか確認してください。
- バインドされた PVC を削除する前に、PV を削除したかどうかを確認する
- ポッドがまだ動作していて、PVC にアタッチされているときに PVC を除外したかどうかを確認する
PV を削除した場合
この問題をトラブルシューティングするには、PV にバインドされている PVC を削除します。
Terminating 状態に留まっている PV に関連する PVC を特定するには、次のコマンドを実行して PV を記述します。
kubectl get pv pv-name
注: pv-name を実際の PV 名に置き換えます。このコマンドは、PVC 名と名前空間を NAMESPACE/PVC_NAME 形式で表示します。
出力例
default/ebs-claim
次のコマンドを実行して PVC を削除します。
kubectl delete pvc -n namespace-name pvc-name
注: 実際のものでそれぞれ、namespace-name を PVC の名前空間に、pvc-name を PVC 名に置き換えます。
それでも PV を削除できない場合は、次のコマンドを実行してファイナライザーを削除します。
kubectl patch pv -p '{"metadata":{"finalizers":null}}' pv-name
注: pv-name を実際の PV 名に置き換えます。
PVC を除外した場合
この問題を解決するには、PVC にアタッチされているポッドを削除します。
PVC に関連付けられているポッドを特定するには、次のコマンドを実行して PVC を記述します。
kubectl describe pvc -n namespace-name pvc-name
注: 実際のものでそれぞれ、namespace-name を PVC の名前空間に、pvc-name を PVC 名に置き換えます。出力で、Used by 属性を確認します。
出力例
Name: ebs-claim Namespace: default StorageClass: ebs-sc Status: Bound Volume: pvc-3402cc47-c4d7-42c3-8965-f9e1e08f8b95 Labels: <none> Annotations: pv.kubernetes.io/bind-completed: yes pv.kubernetes.io/bound-by-controller: yes volume.beta.kubernetes.io/storage-provisioner: ebs.csi.aws.com volume.kubernetes.io/selected-node: ip-192-168-33-43.ec2.internal volume.kubernetes.io/storage-provisioner: ebs.csi.aws.com Finalizers: [kubernetes.io/pvc-protection] Capacity: 4Gi Access Modes: RWO VolumeMode: Filesystem Used By: ebs-app-59c74d8d45-z65kj Events: <none>
上記の例では、ebs-app-59c74d8d45-z65kj ポッドが PVC を使用しています。
次のコマンドを実行してポッドを削除します。
kubectl delete pod -n namespace-name pod-name
注: 実際のものでそれぞれ、namespace-name を PVC の名前空間に、pod-name をポッド名に置き換えます。
それでも PVC を削除できない場合は、次のコマンドを実行してファイナライザーを削除します。
kubectl patch pvc -p '{"metadata":{"finalizers":null}}' -n namespace-name pvc-name
注: 実際のものでそれぞれ、namespace-name を PVC の名前空間に、pvc-name を PVC 名に置き換えます。
ポッドの削除に関する問題のトラブルシューティング
ポッドを削除できない場合は、次の問題がないか確認してください。
- ポッドが破棄シグナルに応答していないかどうかを確認します
- ポッドにまだ完了していないファイナライザーが関連付けられているかどうかを確認する
ポッドが破棄シグナルに応答しない
重要: 次の解決策では、実行中のポッドが破棄されたことを確認せずに、ポッドがすぐに削除されます。ポッドが動作していないことを確認します。確認しなかった場合、ポッドはクラスター上で無期限に実行される可能性があります。
ポッドは通常、デフォルトの猶予期間である 30 秒後に削除されます。30 秒経ってもポッドが削除されない場合は、次のコマンドを実行してポッドを強制削除します。
kubectl delete pod --force --grace-period=0 -n namespace-name pod-name
注: 実際のものでそれぞれ、namespace-name を ポッドの名前空間に、pod-name をポッド名に置き換えます。ポッドをすぐに削除するには、--grace-period フラグを 0 に設定する必要があります。
ポッドには、まだ完了していないファイナライザーが関連付けられている
ポッドにファイナライザーがあるかどうかを確認するには、次のコマンドを実行します。
kubectl get pod -o yaml -n namespace-name pod-name
注: 実際のものでそれぞれ、namespace-name を ポッドの名前空間に、pod-name をポッド名に置き換えます。出力で metadata.finalizers を参照し、ファイナライザーを特定します。
出力例
apiVersion: v1 kind: Pod metadata: creationTimestamp: "2024-09-16T19:32:01Z" finalizers: - kubernetes labels: app: nginx pod-template-hash: 7c79c4bf97 namespace: default spec: containers: - image: nginx:latest imagePullPolicy: Always name: nginx ports: - containerPort: 80 protocol: TCP
ファイナライザーを削除するには、次のコマンドを実行します。
kubectl patch pod -p '{"metadata":{"finalizers":null}}' -n namespace-name pod-name
注: 実際のものでそれぞれ、namespace-name を ポッドの名前空間に、pod-name をポッド名に置き換えます。
クラスター削除に関する問題のトラブルシューティング
通常、クラスター削除に関する問題は、クラスターにマネージドノードグループが接続されていることが原因で発生します。この問題をトラブルシューティングするには、そのマネージドノードグループを削除します。詳細については、「Amazon EKS クラスターを削除できない理由を知りたいです」を参照してください。
クラスターにマネージドスクレイパーが関連付けられている場合も、削除の問題が発生する可能性があります。このシナリオでは、スクレイパーが使用する仮想プライベートネットワーク (VPC) または Elastic ネットワークインターフェイスを削除できません。
スクレイパーの ID を特定するには、次の AWS CLI コマンド list-scrapers を実行します。
aws amp list-scrapers
次に、以下の delete-scraper コマンドを実行してスクレイパーを削除します。
aws amp delete-scraper --scraper-id scraper-example
注: scraper-example をスクレイパーの ID に置き換えます。
Amazon EKS のマネージドノードグループ削除に関する問題をトラブルシューティングする
マネージドノードグループを削除できない場合は、次の問題がないか確認してください。
- リソースに依存オブジェクトがあるかどうかを確認する
- Amazon EC2 オートスケーリンググループの Terminate プロセスが中断されていないか確認する
- ノードグループに正常性に関するエラーがないかを確認する
- ポッドがノードで行き詰まっていないかを確認する
リソースに依存オブジェクトがある場合
依存関係の問題は、マネージドノードグループが作成したリソースが AWS アカウントの別のリソースに関連付けられている場合に発生します。通常、リソースはセキュリティグループです。この問題を解決するには、セキュリティグループに関連付けられているオブジェクトを特定します。次に、セキュリティグループとリソースの関連付けを解除します。問題が発生した場合は、「Amazon VPC にアタッチされているセキュリティグループを削除できない理由を知りたいです」を参照してください。
EC2 Auto Scaling グループの Terminate プロセスが中断されている
この問題をトラブルシューティングするには、Terminate プロセスを再起動します。
ノードグループに正常性に関するエラーがある
マネージドノードグループで発生する可能性のある正常性エラーの種類については、「問題」を参照してください。
正常性の問題をトラブルシューティングする方法については、「Amazon EKS クラスターのマネージドノードグループでのエラーを解決する方法を教えてください」を参照してください。
ポッドがノードで行き詰まっている
マネージドノードグループを削除する際、次のエラーメッセージが表示される場合があります。
「1 pods are unevictable from node ip-192-168-29-140.ec2.internal」
この問題は、クラスター内のポッドが Terminating 状態から変化しない場合に発生する可能性があります。この問題をトラブルシューティングするには、クラスターへの kubectl のアクセスを取得し、次のコマンドを実行します。
kubectl get pod -A
pods are unevictable エラーは、PodDisruptionBudget に設定ミスがあるか、ポッドがエビクションを行うために十分な中断がない場合に発生することがあります。この問題のトラブルシューティング方法については、「Amazon EKS でのマネージドノードグループの更新に関する問題をトラブルシューティングする方法を教えてください」を参照してください。
- トピック
- Containers
- 言語
- 日本語

関連するコンテンツ
質問済み 2年前
AWS公式更新しました 4年前