Kubernetes中无法删除一个对象,持续处于Terminating状态的解决方案

1. 问题描述

未使用uninstall.yml文件删除longhorn组件的时候,从而造成无法删除longhorn-system名称空间的解决方案

此时使用kubectl delete ns longhorn-system已经无法完成删除操作了。会持续显示terminating的状态

2. 解决方案

此时可以将无法删除且一直处于terminating状态的对象以json格式导出为文件,此处的对象是名为longhorn-system的名称空间。该名称空间导出为json格式,然后然后去掉其中的spec以及status字段信息。

具体如下:

[root@c7u6s5:longhorn]# kubectl get ns longhorn-system -o json > longhron-system.json
[root@c7u6s5:longhorn]# vim longhorn-system.json
[root@c7u6s5:longhorn]# cat longhorn-system.json 
{
 "apiVersion": "v1",
 "kind": "Namespace",
 "metadata": {
     "annotations": {
         "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"longhorn-system\"}}\n"
     },
     "creationTimestamp": "2022-03-13T08:48:06Z",
     "deletionTimestamp": "2022-03-21T09:09:02Z",
     "labels": {
         "kubernetes.io/metadata.name": "longhorn-system"
     },
     "name": "longhorn-system",
     "resourceVersion": "13365518",
     "uid": "9182f43a-e302-4fe5-b8b4-b37bde46228a"
 }
}
[root@c7u6s5:longhorn]# 

上述就是将spec以及status字段去掉之后的内容。

然后启动kubectl proxy代理,通过curl命令直接与api服务器通信,通过@longhorn-system.json语法指定传输上述生成的文件,表示对该文件中的对象执行finalize操作。具体如下:

[root@c7u6s5:longhorn]# curl -k -H 'Content-Type: application/json' -XPUT --data-binary @longhorn-system.json http://127.0.0.1:8001/api/v1/namespaces/longhorn-system/finalize
{
"kind": "Namespace",
"apiVersion": "v1",
"metadata": {
 "name": "longhorn-system",
 "uid": "9182f43a-e302-4fe5-b8b4-b37bde46228a",
 "resourceVersion": "13365518",
 "creationTimestamp": "2022-03-13T08:48:06Z",
 "deletionTimestamp": "2022-03-21T09:09:02Z",
 "labels": {
   "kubernetes.io/metadata.name": "longhorn-system"
 },
 "annotations": {
   "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"longhorn-system\"}}\n"
 },
 "managedFields": [
   {
     "manager": "kubectl-client-side-apply",
     "operation": "Update",
     "apiVersion": "v1",
     "time": "2022-03-13T08:48:06Z",
     "fieldsType": "FieldsV1",
     "fieldsV1": {"f:metadata":{"f:annotations":{".":{},"f:kubectl.kubernetes.io/last-applied-configuration":{}},"f:labels":{".":{},"f:kubernetes.io/metadata.name":{}}}}
   },
   {
     "manager": "kube-controller-manager",
     "operation": "Update",
     "apiVersion": "v1",
     "time": "2022-03-21T09:09:08Z",
     "fieldsType": "FieldsV1",
     "fieldsV1": {"f:status":{"f:conditions":{".":{},"k:{\"type\":\"NamespaceContentRemaining\"}":{".":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"NamespaceDeletionContentFailure\"}":{".":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"NamespaceDeletionDiscoveryFailure\"}":{".":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"NamespaceDeletionGroupVersionParsingFailure\"}":{".":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"NamespaceFinalizersRemaining\"}":{".":{},"f:lastTransitionTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}}}}}
   }
 ]
},
"spec": {

},
"status": {
 "phase": "Terminating",
 "conditions": [
   {
     "type": "NamespaceDeletionDiscoveryFailure",
     "status": "False",
     "lastTransitionTime": "2022-03-21T09:27:42Z",
     "reason": "ResourcesDiscovered",
     "message": "All resources successfully discovered"
   },
   {
     "type": "NamespaceDeletionGroupVersionParsingFailure",
     "status": "False",
     "lastTransitionTime": "2022-03-21T09:09:08Z",
     "reason": "ParsedGroupVersions",
     "message": "All legacy kube types successfully parsed"
   },
   {
     "type": "NamespaceDeletionContentFailure",
     "status": "False",
     "lastTransitionTime": "2022-03-21T09:23:09Z",
     "reason": "ContentDeleted",
     "message": "All content successfully deleted, may be waiting on finalization"
   },
   {
     "type": "NamespaceContentRemaining",
     "status": "True",
     "lastTransitionTime": "2022-03-21T09:09:08Z",
     "reason": "SomeResourcesRemain",
     "message": "Some resources are remaining: engineimages.longhorn.io has 1 resource instances, nodes.longhorn.io has 3 resource instances"
   },
   {
     "type": "NamespaceFinalizersRemaining",
     "status": "True",
     "lastTransitionTime": "2022-03-21T09:09:08Z",
     "reason": "SomeFinalizersRemain",
     "message": "Some content in the namespace has finalizers remaining: longhorn.io in 4 resource instances"
   }
 ]
}
}

# 执行晚上述操作之后,longhorn-system名称空间就被删除了。
[root@c7u6s5:longhorn]#curl -k -H 'Content-Type: application/json' -XPUT --data-binary @longhorn-system.json http://127.0.0.1:8001/api/v1/namespaces/longhorn-system/finalize
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {

},
"status": "Failure",
"message": "Operation cannot be fulfilled on namespaces \"longhorn-system\": StorageError: invalid object, Code: 4, Key: /registry/namespaces/longhorn-system, ResourceVersion: 0, AdditionalErrorMsg: Precondition failed: UID in precondition: 9182f43a-e302-4fe5-b8b4-b37bde46228a, UID in object meta: ",
"reason": "Conflict",
"details": {
 "name": "longhorn-system",
 "kind": "namespaces"
},
"code": 409
}[root@c7u6s5:longhorn]#kbuectl get ns
-bash: kbuectl: command not found
[root@c7u6s5:longhorn]# kubectl get ns
NAME                   STATUS   AGE
app-team1              Active   175d
default                Active   230d
kube-node-lease        Active   230d
kube-public            Active   230d
kube-system            Active   230d
kubernetes-dashboard   Active   98m
my-ns                  Active   216d
project-snake          Active   167d
[root@c7u6s5:longhorn]# 

上述的curl命令中的@符号后面的是json文件名称。

上述就完成了longhron-system名称空间的删除操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值