参考:https://blog.csdn.net/lxy___/article/details/106644302
调用API接口删除
bash
[root@master ~]# netstat -ntlp | grep kube-apiserve
tcp6 0 0 :::6443 :::* LISTEN 7737/kube-apiserver
#API接口查询
[root@master ~]# kubectl get ns monitoring -ojson > tmp.json
#导出信息
修改如下内容
javascript
[root@master ~]# cat tmp.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"monitoring\"}}\n"
},
"creationTimestamp": "2020-04-24T01:39:40Z",
"deletionTimestamp": "2020-06-09T07:22:46Z",
"name": "monitoring",
"resourceVersion": "30261",
"selfLink": "/api/v1/namespaces/monitoring",
"uid": "3fdd71e6-9693-4d44-bd8a-f1e54799cde4"
},
"spec": {
"finalizers": [
"kubernetes"
]
},
"status": {
"phase": "Terminating"
}
}
删除以下代码段
javascript
"spec": {
"finalizers": [
"kubernetes"
]
},
权限问题
javascript
修改完成后,直接调用API接口会有报错如下
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://127.0.0.1:6443/api/v1/namespaces/monitoring(替换成自己要删除的ns)/finalize
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "namespaces \"monitoring\" is forbidden: User \"system:anonymous\" cannot update resource \"namespaces/finalize\" in API group \"\" in the namespace \"monitoring\"",
"reason": "Forbidden",
"details": {
"name": "monitoring",
"kind": "namespaces"
},
"code": 403
此时需要创建匿名用户的权限,命令如下
bash
kubectl create clusterrolebinding test:anonymous --clusterrole=cluster-admin --user=system:anonymous
再次调用
javascript
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://127.0.0.1:6443/api/v1/namespaces/monitoring(替换成自己要删除的ns)/finalize
{
"kind": "Namespace",
"apiVersion": "v1",
"metadata": {
"name": "monitoring",
"selfLink": "/api/v1/namespaces/monitoring/finalize",
"uid": "3fdd71e6-9693-4d44-bd8a-f1e54799cde4",
"resourceVersion": "30261",
"creationTimestamp": "2020-04-24T01:39:40Z",
"deletionTimestamp": "2020-06-09T07:22:46Z",
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"monitoring\"}}\n"
}
},
"spec": {
},
"status": {
"phase": "Terminating"
}
删除成功
bash
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 46d
kube-node-lease Active 46d
kube-public Active 46d
kube-system Active 46d