この永遠の「終了」ステータスを示す「スタック」ネームスペースを削除しました。
次のようなリソースをすでに強制削除しようとしていると仮定します: ポッドは終了ステータスでスタックしました 、そしてあなたの気の向くままで名前空間を回復しようとしています...
名前空間を強制的に削除することができます(おそらく、宙ぶらりんのリソースを残します)。
(
NAMESPACE=your-rogue-namespace
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
)
私たちにとっては、metrics-server
クラッシュでした。
したがって、これがあなたのケースに関連するかどうかを確認するには、次の実行を行います:kubectl api-resources
あなたが取得する場合
error: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request
その後、おそらく同じ問題
クレジットは@javierprovechoに送られます here
これは、ネームスペースコントローラーが削除できないネームスペースにまだ存在するリソースが原因です。
このコマンド(kubectl 1.11+を使用)は、名前空間に残っているリソースを表示します。
kubectl api-resources --verbs=list --namespaced -o name \
| xargs -n 1 kubectl get --show-kind --ignore-not-found -n <namespace>
それらを見つけて解決して削除すると、名前空間がクリーンアップされます
nobar で既に素晴らしい答えを完成させます。 Rancherを使用してクラスタをデプロイした場合、警告があります。
Rancherのデプロイは、すべてのAPIコールを変更し、/k8s/clusters/c-XXXXX/
をURLの先頭に追加します。
ランチャー上のクラスターのID(c-XXXXX
)は、URLにあるため、Rancher UIから簡単に取得できます。
したがって、そのクラスターID c-xxxxを取得したら、nobarが言うように、そのランチャービットを含むapi呼び出しを変更するだけです。
(
NAMESPACE=your-rogue-namespace
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" \
-X PUT --data-binary @temp.json \
127.0.0.1:8001/k8s/clusters/c-XXXXX/api/v1/namespaces/$NAMESPACE/finalize
)
「terminating
」名前空間を削除する唯一の方法は、「finalizers」セクション内のエントリを削除することです。 --force
を削除して--grace-period=0
にしようとしましたが、どれも機能しませんでしたが、この方法は機能しました:
コマンドラインでネームスペースからの情報を表示します:
$ kubectl get namespace your-rogue-namespace -o yaml
これにより、yaml出力が得られます。次のような行を探してください。
deletionTimestamp: 2018-09-17T13:00:10Z
finalizers:
- Whatever content it might be here...
labels:
次に、名前空間の構成を編集し、そのファイナライザーコンテナー内のアイテムを削除します。
$ kubectl edit namespace your-rogue-namespace
これによりエディターが開き(私の場合はVI)、削除したい行に移動して削除し、Dキーを2回押して行全体を削除しました。
保存して、エディタを終了し、魔法のように。不正な名前空間はなくなるはずです。
そしてそれを確認するには:
$ kubectl get namespace your-rogue-namespace -o yaml
その後に孤立したリソースが残る可能性があることに注意してください。