次の方法で共有


ポッドと名前空間が終了状態でスタックしている場合のトラブルシューティング

この記事では、ポッドと名前空間が Terminating 状態のままである Microsoft Azure Kubernetes Service (AKS) のシナリオのトラブルシューティング戦略について説明します。

前提条件

トラブルシューティングのチェックリスト

手順 1: 削除するポッドを決定する

削除する必要があるポッドの名前と、ポッドが属している名前空間を確認します。 AKS クラスターで実行されているポッドとポッドが動作している名前空間を確認するには、次の kubectl get コマンドを実行します。

kubectl get pod --all-namespaces

手順 2: ポッドを削除する

手順 1 の情報を使用して、次の kubectl delete コマンドを実行してポッドを削除します。

kubectl delete <pod-name> --namespace <namespace-name>

Note

指定したポッドが "既定" 名前空間に属している場合は、 --namespace <namespace-name> パラメーターを省略できます。

次のエラー メッセージが表示される場合は、ポッド名と名前空間名が正しいことを確認してください。

サーバーからのエラー (NotFound): ポッド "<POD NAME>" が見つかりません

ポッドと名前空間の名前が正しく、ポッドが削除されなかった場合は、ポッドを強制的に削除できます。 これを行うには、次の kubectl delete コマンドを実行します。

kubectl delete pod <pod-name> --namespace <namespace-name> --grace-period=0 --force --wait=false

手順 3: 削除する名前空間を決定する

削除する必要がある名前空間の名前を確認します。 AKS クラスターで実行されている名前空間を確認するには、次の kubectl get コマンドを実行します。

kubectl get namespace

手順 4: 名前空間内のリソースを検索する

名前空間が Terminating 状態でスタックしている場合は、名前空間内で定義されているすべてのリソースを見つけます。 これを行うには、次の kubectl get コマンドを実行します。

kubectl get all --namespace <namespace-name>

手順 5: 名前空間内のリソースを削除する

名前空間内で定義されているリソースを検出したら、それらのリソースを削除します。 削除するリソースごとに、次の kubectl delete コマンドを実行します。

kubectl delete <resource> <resource name> --namespace <namespace-name> --grace-period=0 --force --wait=false

たとえば、nginx名前空間内のnginxtest ポッドを削除する場合は、次のコマンドを実行します。

kubectl delete pod nginxtest --namespace nginx --grace-period=0 --force --wait=false

手順 6: 名前空間を削除する

名前空間内のすべてのリソースを削除した後、名前空間自体を削除します。 これを行うには、次の kubectl delete コマンドを実行します。

kubectl delete namespace <namespace-name>  --grace-period=0 --force --wait=false

警告

誤って削除されないようにファイナライザーを使用場合、最初は kubectl delete コマンドが正常に実行されないことがあります。 ファイナライザーは、削除前操作を通知するリソースのキーです。 ファイナライザーはリソースのガベージ コレクションを制御し、リソースを削除する前に行うクリーンアップ操作についてコントローラーに警告するように設計されています。

ただし、ファイナライザーは必ずしも実行する必要があるコードを識別するとは限りません。 実際、ファイナライザーは次のように注釈に似ています。

  • これらは基本的にキーのリストです。
  • これらは操作できます。

ファイナライザーが存在するリソースを削除しようとすると、コントローラーがファイナライザー キーを削除するか、kubectl を使用してファイナライザーが削除されるまで、リソースは最終処理のままになります。 ファイナライザー リストが空になると、Kubernetes はリソースを再利用し、レジストリから削除するキューに配置できます。

名前空間にリソースが残っていなくても、名前空間が Terminating 状態のままである場合は、次の kubectl patch コマンドを実行してファイナライザー フィールドを空にします。

kubectl patch namespace <namespace-name> --patch '{"metadata": {"finalizers": null}}'

このアクションにより、 kubectl delete コマンドをもう一度実行したときに、名前空間を正常に削除できます。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。