0


Kubernetes删除ns(namespace)

一、前言

删除某个应用或模块的时候,可能会出现命名空间的状态一直处于Terminating状态,无论是重启k8s还是重启所有服务器都没卵用。

k8s遇到有无法删除的ns(namespace)命名空间的时候,可以尝试几种删除方式

二、删除命名空间namespace

1、先查看k8s

  1. [root@k8s-master1 ~]# kubectl get ns
  2. NAME STATUS AGE
  3. cattle-impersonation-system Terminating 2d14h
  4. cattle-system Terminating 2d14h
  5. default Active 13d
  6. ingress-nginx Terminating 4d13h
  7. kube-node-lease Active 13d
  8. kube-public Active 13d
  9. kube-system Active 13d
  10. monitoring Active 12d

2、可以先逐步尝试以下几种删除kubernetes命名空间namespace的方法

  1. kubectl delete ns <要删除的命名空间>
  2. kubectl delete ns <要删除的命名空间> --froce
  3. kubectl delete ns <要删除的命名空间> --force --grace-period=0

3、如果上面的3中方法依然无法删除kubernetes命名空间,则可以再尝试使用接口去删除

三、使用接口的方式删除kubernetes命名空间

1、获取命名空间的json文件,下面以删除ingress-nginx这个命名空间为例。

kubectl get ns ingress-nginx -o json > delete-ns-ingress-nginx.json

如得到的源文件:

  1. {
  2. "apiVersion": "v1",
  3. "kind": "Namespace",
  4. "metadata": {
  5. "annotations": {
  6. "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\"}]}",
  7. "field.cattle.io/projectId": "c-m-x64sl2w6:p-4845x",
  8. "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",
  9. "lifecycle.cattle.io/create.namespace-auth": "true",
  10. "management.cattle.io/no-default-sa-token": "true"
  11. },
  12. "creationTimestamp": "2023-06-26T15:26:03Z",
  13. "deletionGracePeriodSeconds": 0,
  14. "deletionTimestamp": "2023-06-29T15:06:06Z",
  15. "finalizers": [
  16. "controller.cattle.io/namespace-auth" #删除这一行,并且保持finalizers数组为空,即[]
  17. ],
  18. "labels": {
  19. "app.kubernetes.io/instance": "ingress-nginx",
  20. "app.kubernetes.io/name": "ingress-nginx",
  21. "kubernetes.io/metadata.name": "ingress-nginx"
  22. },
  23. "name": "ingress-nginx",
  24. "resourceVersion": "147165",
  25. "uid": "7dc28b36-5960-4237-b1b5-41b8d6e20f7c"
  26. },
  27. "spec": {},
  28. "status": {
  29. "conditions": [
  30. {
  31. "lastTransitionTime": "2023-06-29T15:06:14Z",
  32. "message": "All resources successfully discovered",
  33. "reason": "ResourcesDiscovered",
  34. "status": "False",
  35. "type": "NamespaceDeletionDiscoveryFailure"
  36. },
  37. {
  38. "lastTransitionTime": "2023-06-29T15:06:14Z",
  39. "message": "All legacy kube types successfully parsed",
  40. "reason": "ParsedGroupVersions",
  41. "status": "False",
  42. "type": "NamespaceDeletionGroupVersionParsingFailure"
  43. },
  44. {
  45. "lastTransitionTime": "2023-06-29T15:06:14Z",
  46. "message": "All content successfully deleted, may be waiting on finalization",
  47. "reason": "ContentDeleted",
  48. "status": "False",
  49. "type": "NamespaceDeletionContentFailure"
  50. },
  51. {
  52. "lastTransitionTime": "2023-06-29T15:08:52Z",
  53. "message": "All content successfully removed",
  54. "reason": "ContentRemoved",
  55. "status": "False",
  56. "type": "NamespaceContentRemaining"
  57. },
  58. {
  59. "lastTransitionTime": "2023-06-29T15:06:14Z",
  60. "message": "All content-preserving finalizers finished",
  61. "reason": "ContentHasNoFinalizers",
  62. "status": "False",
  63. "type": "NamespaceFinalizersRemaining"
  64. }
  65. ],
  66. "phase": "Terminating"
  67. }
  68. }

2、搜索json文件中finalizers,将其数组置空。如本次没删之前

3、在k8s的master节点上开启proxy

  1. kubectl proxy

注意看端口是8001

4、再开一个k8s-master节点的终端以便我们执行命令

  1. 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已经被彻底干掉了。

------ok--------kahn------2023年7月1日13:29:26-----------


本文转载自: https://blog.csdn.net/xoofly/article/details/131492019
版权归原作者 潇洒哥Kahn 所有, 如有侵权,请联系我们删除。

“Kubernetes删除ns(namespace)”的评论:

还没有评论