kubernetes名前空間の終了状態が削除できない問題の解決方法


1.現象

注文

Kubectl get ns

名前空間は常に終了状態になります。
ここに画像の説明を挿入します
kubectl delete ns test --force=true を使用します # プロンプトを削除できません
ここに画像の説明を挿入します
原因分析: k8s は、現在の名前空間にまだ解放されていないリソースがあると考えています。

2. 解決策

1. ネームスペース内のすべてのリソースを表示します (このステップは非常に重要です)。

kubectl api-resources -o name --verbs=list --namespaced | xargs -n 1 kubectl get --show-kind --ignore-not-found -n test

注意:确保test命名空间下全部资源都是No Resources,才可以执行以下的步骤。

2. 名前空間を json ファイルとしてエクスポートする

テスト名前空間を json ファイルとしてエクスポートする

次のコードを実行すると、現在のディレクトリに test.json ファイルが生成されます。

kubectl get namespace test -o json > test.json

3. 名前空間ファイルを編集する

仕様に基づいてコンテンツを削除します。このステップの目的は、コンテンツをクリアし、元の ns を空のコンテンツ ns で上書きし、削除する ns コンテンツが空であり、削除されたコマンドはブロックできないことを k8s-api に伝えることです。

ここに画像の説明を挿入します

4. API サーバー インターフェイスを介して、空のコンテンツを含む ns の名前空間を k8s クラスターにカバーします。

次のコマンドを使用します

curl -k \
-H "Content-Type: application/json" \
-X PUT \
--data-binary @test.json \
http://127.0.0.1:8001/api/v1/namespaces/test/finalize

ここで実行すると、k8sマスターノードが認証を使用しているため、コマンドを直接使用すると接続が拒否されることがわかりますが、
ここに画像の説明を挿入します
ここではプロキシとしてkube-proxyを使用する必要があります。

5. プロキシとして kube-proxy を使用する

注意:这里需要新开一个控制台,执行命令

kubectl proxy --port=8081 

次に、手順 4 の操作を実行すると、次の図の結果が表示されます。これは、実行が成功したことを意味します。
ここに画像の説明を挿入します

3. 再度確認

コマンドを実行すると、テスト名前空間が削除されていることがわかります。

kubectl get ns

ここに画像の説明を挿入します
終わったので、もう終わりにします。

おすすめ

転載: blog.csdn.net/bacawa/article/details/130864714