I.はじめに
アプリケーションやモジュールを削除すると、名前空間の状態が常に終了状態になる可能性があるため、k8s を再起動したり、すべてのサーバーを再起動したりする必要はありません。
k8s が削除できない ns (namespace) 名前空間に遭遇した場合、いくつかの削除方法を試すことができます。
2. 名前空間ネームスペースを削除します。
1. まず k8s を確認します
[root@k8s-master1 ~]# kubectl get ns
NAME STATUS AGE
cattle-impersonation-system Terminating 2d14h
cattle-system Terminating 2d14h
default Active 13d
ingress-nginx Terminating 4d13h
kube-node-lease Active 13d
kube-public Active 13d
kube-system Active 13d
monitoring Active 12d
2. 次の方法を試して、kubernetes 名前空間名前空間を段階的に削除できます。
kubectl delete ns <要删除的命名空间>
kubectl delete ns <要删除的命名空间> --froce
kubectl delete ns <要删除的命名空间> --force --grace-period=0
3. 上記の 3 つの方法でも kubernetes 名前空間を削除できない場合は、インターフェイスを使用して削除してみてください。
3. インターフェイスを使用して kubernetes 名前空間を削除します。
1. 名前空間の json ファイルを取得します。例として、名前空間 ingress-nginx を削除します。
kubectl get ns ingress-nginx -o json > delete-ns-ingress-nginx.json
ソースファイルを取得した場合:
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"cattle.io/status": "{\"Conditions\":[{\"Type\":\"ResourceQuotaInit\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2023-06-28T22:44:35Z\"},{\"Type\":\"InitialRolesPopulated\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2023-06-28T22:44:41Z\"}]}",
"field.cattle.io/projectId": "c-m-x64sl2w6:p-4845x",
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/instance\":\"ingress-nginx\",\"app.kubernetes.io/name\":\"ingress-nginx\"},\"name\":\"ingress-nginx\"}}\n",
"lifecycle.cattle.io/create.namespace-auth": "true",
"management.cattle.io/no-default-sa-token": "true"
},
"creationTimestamp": "2023-06-26T15:26:03Z",
"deletionGracePeriodSeconds": 0,
"deletionTimestamp": "2023-06-29T15:06:06Z",
"finalizers": [
"controller.cattle.io/namespace-auth" #删除这一行,并且保持finalizers数组为空,即[]
],
"labels": {
"app.kubernetes.io/instance": "ingress-nginx",
"app.kubernetes.io/name": "ingress-nginx",
"kubernetes.io/metadata.name": "ingress-nginx"
},
"name": "ingress-nginx",
"resourceVersion": "147165",
"uid": "7dc28b36-5960-4237-b1b5-41b8d6e20f7c"
},
"spec": {},
"status": {
"conditions": [
{
"lastTransitionTime": "2023-06-29T15:06:14Z",
"message": "All resources successfully discovered",
"reason": "ResourcesDiscovered",
"status": "False",
"type": "NamespaceDeletionDiscoveryFailure"
},
{
"lastTransitionTime": "2023-06-29T15:06:14Z",
"message": "All legacy kube types successfully parsed",
"reason": "ParsedGroupVersions",
"status": "False",
"type": "NamespaceDeletionGroupVersionParsingFailure"
},
{
"lastTransitionTime": "2023-06-29T15:06:14Z",
"message": "All content successfully deleted, may be waiting on finalization",
"reason": "ContentDeleted",
"status": "False",
"type": "NamespaceDeletionContentFailure"
},
{
"lastTransitionTime": "2023-06-29T15:08:52Z",
"message": "All content successfully removed",
"reason": "ContentRemoved",
"status": "False",
"type": "NamespaceContentRemaining"
},
{
"lastTransitionTime": "2023-06-29T15:06:14Z",
"message": "All content-preserving finalizers finished",
"reason": "ContentHasNoFinalizers",
"status": "False",
"type": "NamespaceFinalizersRemaining"
}
],
"phase": "Terminating"
}
}
2. json ファイル内でファイナライザーを検索し、配列を空にします。今度は削除されなかったら
3. k8sのマスターノードでプロキシを開きます
kubectl proxy
ポートが 8001 であることに注意してください。
4. コマンドを実行できるように、別の k8s-master ノードのターミナルを開きます。
curl -k -H "Content-Type: application/json" -X PUT --data-binary @delete-ns-ingress-nginx.json http://127.0.0.1:8001/api/v1/namespaces/ingress-nginx/finalize
注: delete-ns-ingress-nginx.json は、先ほどエクスポートして変更した json ファイルです。コマンドの前の @ 文字に注意してください。
http://127.0.0.1:8001/api/v1/namespaces/ingress-nginx/finalizeの ingress-nginx を、削除する名前空間文字列に置き換えます。
コマンドが実行されると、大量の文字列が返されるので、心配する必要はありません。
5. すべての Kubernetes 名前空間を再度チェックして、ターゲット ns が削除されているかどうかを確認します。
今回削除する名前空間 ingress-nginx が完全にkillされていることがわかります。
------わかりました----------カーン-----2023年7月1日 13:29:26-----------