このページでは、Namespace が Terminating
状態のままになる問題を解決する方法について説明します。
Namespace は、Kubernetes のファイナライザを使用して、Namespace 内にまだリソースが残っている場合の削除を防いでいます。kubectl delete
コマンドを使用して Namespace を削除すると、Namespace は Terminating
状態になります。Kubernetes が依存リソースを削除してすべてのファイナライザをクリアするまで、Namespace は Terminating
状態のままになります。Namespace ライフサイクル コントローラは、まず Namespace 内で GKE が削除する必要のあるリソースのリストを作成します。
GKE が依存リソースを削除できない場合か、Namespace ライフサイクル コントローラが Namespace が空の状態であることを確認できない場合、問題を解決するまで Namespace は Terminating
状態のままになります。
Namespace が Terminating
状態のままになっている問題を解決するには、削除を妨げている異常なコンポーネントを特定して削除します。以下の解決策を順番に試してください。
利用できない API サービスを見つけて削除する
使用できない API サービスの一覧を取得します。
kubectl get apiservice | grep False
応答していないサービスのトラブルシューティングを行います。
kubectl describe apiservice API_SERVICE
API_SERVICE
は、応答していないサービスの名前に置き換えます。Namespace のステータスが引き続き
Terminating
かどうかを確認します。kubectl get ns | grep Terminating
残存しているリソースを見つけて削除する
終了処理中の Namespace に残っているリソースの一覧を取得します。
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n NAMESPACE
NAMESPACE
は、削除する Namespace の名前に置き換えます。出力にあるリソースをすべて削除します。
Namespace のステータスが引き続き
Terminating
かどうかを確認します。kubectl get ns | grep Terminating
Namespace を強制削除する
Namespace の削除を妨げているファイナライザを削除して、Namespace を強制終了します。
次のマニフェストを YAML ファイルとして保存します。
kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
テキスト エディタでマニフェストを開き、
spec.finalizers
フィールドのすべての値を削除します。vi ns-terminating.yml
ファイナライザ フィールドが空であることを確認します。
cat ns-terminating.yml
出力は次のようになります。
apiVersion: v1 kind: Namespace metadata: annotations: name: NAMESPACE spec: finalizers: status: phase: Terminating
HTTP プロキシを開始して Kubernetes API にアクセスします。
kubectl proxy
curl
を使用して Namespace マニフェストを置き換えます。curl -H "Content-Type: application/yaml" -X PUT --data-binary @ns-terminating.yml http://127.0.0.1:8001/api/v1/namespaces/NAMESPACE/finalize
Namespace のステータスが引き続き
Terminating
かどうかを確認します。kubectl get ns | grep Terminating
次のステップ
さらにサポートが必要な場合は、Cloud カスタマーケアにお問い合わせください。