この記事では、ポッドと名前空間が Terminating
状態のままである Microsoft Azure Kubernetes Service (AKS) のシナリオのトラブルシューティング戦略について説明します。
前提条件
Kubernetes kubectl ツール。
注: Azure CLI を使用して kubectl をインストールするには、 az aks install-cli コマンドを実行します。
トラブルシューティングのチェックリスト
手順 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 フィードバック コミュニティに製品フィードバックを送信することもできます。