記事ディレクトリ
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
終わったので、もう終わりにします。