k8s中namespace有兩種常見的狀態,即Active和Terminating狀態,其中后者一般會比較少見,只有當對應的命名空間下還存在運行的資源,但是該命名空間被刪除時才會出現所謂的terminating狀態,這種情況下只要等待k8s本身將命名空間下的資源回收后,該命名空間將會被系統自動刪除。但是今天遇到命名空間下已沒相關資源,但依然無法刪除terminating狀態的命名空間的情況,特此記錄一下.
在項目的k8s中安裝了kube-prometheus,但是根據用處不是太大,而且阿里雲資源不多,就准備卸載了,結果卡住了
查看napespace定義的json配置
刪除掉spec部分即可
[root@k8s-master ~]# kubectl get ns monitoring -o json > monitoring.json
[root@k8s-master ~]# cat monitoring.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"monitoring\"}}\n"
},
"creationTimestamp": "2021-07-19T03:13:20Z",
"deletionTimestamp": "2021-07-26T10:23:58Z",
"name": "monitoring",
"resourceVersion": "2912094",
"selfLink": "/api/v1/namespaces/monitoring",
"uid": "88cfc047-3736-42bb-ab51-db07fec7c6ef"
},
"spec": {
"finalizers": [
"kubernetes"
]
},
"status": {
"conditions": [
{
"lastTransitionTime": "2021-07-26T10:24:09Z",
"message": "Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request",
"reason": "DiscoveryFailed",
"status": "True",
"type": "NamespaceDeletionDiscoveryFailure"
},
{
"lastTransitionTime": "2021-07-26T10:24:04Z",
"message": "All legacy kube types successfully parsed",
"reason": "ParsedGroupVersions",
"status": "False",
"type": "NamespaceDeletionGroupVersionParsingFailure"
},
{
"lastTransitionTime": "2021-07-26T10:24:04Z",
"message": "All content successfully deleted, may be waiting on finalization",
"reason": "ContentDeleted",
"status": "False",
"type": "NamespaceDeletionContentFailure"
},
{
"lastTransitionTime": "2021-07-26T10:24:20Z",
"message": "All content successfully removed",
"reason": "ContentRemoved",
"status": "False",
"type": "NamespaceContentRemaining"
},
{
"lastTransitionTime": "2021-07-26T10:24:04Z",
"message": "All content-preserving finalizers finished",
"reason": "ContentHasNoFinalizers",
"status": "False",
"type": "NamespaceFinalizersRemaining"
}
],
"phase": "Terminating"
}
}
刪除下面的部分

導出k8s的密鑰
導出K8s訪問密鑰
echo $(kubectl config view --raw -oyaml | grep client-cert |cut -d ' ' -f 6) |base64 -d > /tmp/client.pem
echo $(kubectl config view --raw -oyaml | grep client-key-data |cut -d ' ' -f 6 ) |base64 -d > /tmp/client-key.pem
echo $(kubectl config view --raw -oyaml | grep certificate-authority-data |cut -d ' ' -f 6 ) |base64 -d > /tmp/ca.pem
使用http接口進行刪除
[root@k8s-master ~]# curl --cert /tmp/client.pem --key /tmp/client-key.pem --cacert /tmp/ca.pem -H "Content-Type: application/json" -X PUT --data-binary @/root/monitoring.json https://172.16.8.43:6443/api/v1/namespaces/monitoring/finalize
{
"kind": "Namespace",
"apiVersion": "v1",
"metadata": {
"name": "monitoring",
"selfLink": "/api/v1/namespaces/monitoring/finalize",
"uid": "88cfc047-3736-42bb-ab51-db07fec7c6ef",
"resourceVersion": "2912094",
"creationTimestamp": "2021-07-19T03:13:20Z",
"deletionTimestamp": "2021-07-26T10:23:58Z",
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"monitoring\"}}\n"
}
},
"spec": {
},
"status": {
"phase": "Terminating",
"conditions": [
{
"type": "NamespaceDeletionDiscoveryFailure",
"status": "True",
"lastTransitionTime": "2021-07-26T10:24:09Z",
"reason": "DiscoveryFailed",
"message": "Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request"
},
{
"type": "NamespaceDeletionGroupVersionParsingFailure",
"status": "False",
"lastTransitionTime": "2021-07-26T10:24:04Z",
"reason": "ParsedGroupVersions",
"message": "All legacy kube types successfully parsed"
},
{
"type": "NamespaceDeletionContentFailure",
"status": "False",
"lastTransitionTime": "2021-07-26T10:24:04Z",
"reason": "ContentDeleted",
"message": "All content successfully deleted, may be waiting on finalization"
},
{
"type": "NamespaceContentRemaining",
"status": "False",
"lastTransitionTime": "2021-07-26T10:24:20Z",
"reason": "ContentRemoved",
"message": "All content successfully removed"
},
{
"type": "NamespaceFinalizersRemaining",
"status": "False",
"lastTransitionTime": "2021-07-26T10:24:04Z",
"reason": "ContentHasNoFinalizers",
"message": "All content-preserving finalizers finished"
}
]
}
再次查看namespace發現已經被刪除了
[root@k8s-master ~]#kubectl get ns
NAME STATUS AGE
default Active 13d
dev Active 13d
framework Active 11d
ingress-nginx Active 7d21h
kube-node-lease Active 13d
kube-public Active 13d
kube-system Active 13d
kuboard Active 13d
[root@k8s-master ~]#