Kubernetes は ns(名前空間) を削除します

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-----------

おすすめ

転載: blog.csdn.net/xoofly/article/details/131492019