在正常删除一个namespace
时使用如下命令:
1 | kubectl delete ns demo-namespace --force --grace-period=0 |
命令执行完成后查看namespace的状态发现demo-namespace
一直处于Terminating
状态,从官网了解到一种方式:开启代理服务,调用接口进行删除。操作步骤大致如下:
-
导出namespace的配置
1
kubectl get ns demo-namespace -o json > tmp.json
-
清空配置中的
finalizers
字段下的内容1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33vim tmp.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"creationTimestamp": "2021-04-22T01:24:03Z",
"managedFields": [
{
"apiVersion": "v1",
"fieldsType": "FieldsV1",
"fieldsV1": {
"f:status": {
"f:phase": {}
}
},
"manager": "kubectl-create",
"operation": "Update",
"time": "2021-04-22T01:24:03Z"
}
],
"name": "demo-namespace",
"resourceVersion": "43539020",
"uid": "d31344b1-d6ff-47db-a71a-37ac370285e5"
},
"spec": {
# 清空内容
"finalizers": []
},
"status": {
"phase": "Active"
}
} -
开启代理
新打开一个命令窗口,执行以下语句,这是一个前台运行命令,保持命令窗口存活:
1
kubectl proxy
-
调用接口删除namespace
1
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/demo-namespace/finalize
-
验证
1
kubectl get ns