先試了強(qiáng)制替換,無法替換掉,強(qiáng)制刪除,也刪除不掉namespace
[root@master k8s-study]# vi ns-demo.yaml
[root@master k8s-study]# kubectl create -f ns-demo.yaml
namespace/demo created
[root@master k8s-study]# kubectl get -f ns-demo.yaml
NAME STATUS AGE
demo Active 17s
[root@master k8s-study]# cp ns-demo.yaml ns-demo-v2.yaml
[root@master k8s-study]# vi ns-demo-v2.yaml
[root@master k8s-study]# kubectl replace -f ns-demo-v2.yaml
namespace/demo replaced
[root@master k8s-study]# kubectl get -f ns-demo.yaml
NAME STATUS AGE
demo Active 102s
[root@master k8s-study]# kubectl get -f ns-demo.yaml -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2023-07-26T13:22:49Z"
labels:
kubernetes.io/metadata.name: demo
name: demo
resourceVersion: "42052444"
uid: 5ff91497-0bb6-448a-8fb2-0aacb017bacc
spec:
finalizers:
- kubernetes
status:
phase: Active
[root@master k8s-study]# kubectl get -f ns-demo-v2.yaml -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2023-07-26T13:22:49Z"
labels:
kubernetes.io/metadata.name: demo
name: demo
resourceVersion: "42052444"
uid: 5ff91497-0bb6-448a-8fb2-0aacb017bacc
spec:
finalizers:
- kubernetes
status:
phase: Active
[root@master k8s-study]# kubectl replace --force -f ns-demo-v2.yaml
namespace "demo" deleted
^C
[root@master k8s-study]# kubectl replace --force=true -f ns-demo-v2.yaml
namespace "demo" deleted
^C
[root@master k8s-study]# kubectl replace --force=true --grace-period=0 -f ns-demo-v2.yaml
namespace "demo" deleted
^C
[root@master k8s-study]# kubectl get ns/demo
NAME STATUS AGE
demo Terminating 10m
[root@master k8s-study]# kubectl get ns/demo -o json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"creationTimestamp": "2023-07-26T13:22:49Z",
"deletionTimestamp": "2023-07-26T13:25:24Z",
"labels": {
"kubernetes.io/metadata.name": "demo"
},
"name": "demo",
"resourceVersion": "42052458",
"uid": "5ff91497-0bb6-448a-8fb2-0aacb017bacc"
},
"spec": {
"finalizers": [
"kubernetes"
]
},
"status": {
"phase": "Terminating"
}
}
[root@master k8s-study]# kubectl edit ns/demo -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2023-07-26T13:22:49Z"
deletionTimestamp: "2023-07-26T13:25:24Z"
labels:
kubernetes.io/metadata.name: demo
name: demo
resourceVersion: "42052458"
uid: 5ff91497-0bb6-448a-8fb2-0aacb017bacc
spec:
finalizers:
- kubernetes
status:
phase: Terminating
[root@master k8s-study]# kubectl get ns/demo
NAME STATUS AGE
demo Terminating 11m
[root@master k8s-study]# kubectl delete ns/demo
namespace "demo" deleted
^C
[root@master k8s-study]# kubectl delete --force ns/demo
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
namespace "demo" force deleted
^C
[root@master k8s-study]# kubectl delete --force --grace-period=0 ns/demo
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
namespace "demo" force deleted
^C
[root@master k8s-study]# curl -H "Content-Type: application/json" -XPUT -d '{"apiVersion":"v1","kind":"Namespace","metadata":{"name":"demo"},"spec":{"finalizers":[]}}' http://localhost:10249/api/v1/namespaces/delete-me/finalize
404 page not found
[root@master k8s-study]# curl -H "Content-Type: application/json" -XPUT -d '{"apiVersion":"v1","kind":"Namespace","metadata":{"name":"demo"},"spec":{"finalizers":[]}}' http://localhost:31811/api/v1/namespaces/delete-me/finalize
curl: (52) Empty reply from server
[root@master k8s-study]# kubectl get ns/demo -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2023-07-26T13:22:49Z"
deletionTimestamp: "2023-07-26T13:25:24Z"
labels:
kubernetes.io/metadata.name: demo
name: demo
resourceVersion: "42052458"
uid: 5ff91497-0bb6-448a-8fb2-0aacb017bacc
spec:
finalizers:
- kubernetes
status:
phase: Terminating
[root@master k8s-study]# kubectl get ns/demo -o json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"creationTimestamp": "2023-07-26T13:22:49Z",
"deletionTimestamp": "2023-07-26T13:25:24Z",
"labels": {
"kubernetes.io/metadata.name": "demo"
},
"name": "demo",
"resourceVersion": "42052458",
"uid": "5ff91497-0bb6-448a-8fb2-0aacb017bacc"
},
"spec": {
"finalizers": [
"kubernetes"
]
},
"status": {
"phase": "Terminating"
}
}
[root@master k8s-study]# curl -H "Content-Type: application/json" -XPUT -d '{"apiVersion":"v1","kind":"Namespace","metadata":{"name":"demo"},"spec":{"finalizers":[]}}' http://localhost:31811/api/v1/namespaces/demo/finalize
curl: (52) Empty reply from server
[root@master k8s-study]# curl -H "Content-Type: application/json" -H “Expect:” -XPUT -d '{"apiVersion":"v1","kind":"Namespace","metadata":{"name":"demo"},"spec":{"finalizers":[]}}' http://localhost:31811/api/v1/namespaces/demo/finalize
curl: (52) Empty reply from server
[root@master k8s-study]# curl -H "Content-Type: application/json" -XPUT -d '{"apiVersion":"v1","kind":"Namespace","metadata":{"name":"demo"},"spec":{"finalizers":[]}}' http://localhost:10249/api/v1/namespaces/demo/finalize
404 page not found
NAMESPACE=demo
kubectl get ns $NAMESPACE -o json | jq '.spec.finalizers=[]' > ns.json
kubectl proxy --port=8899 &
PID=$!
curl -X PUT http://localhost:8899/api/v1/namespaces/$NAMESPACE/finalize -H "Content-Type: application/json" --data-binary @ns.json
kill $PID
這段代碼的含義是在 Kubernetes 環(huán)境中刪除一個(gè)命名空間(Namespace)及其關(guān)聯(lián)的資源,包括在命名空間中運(yùn)行的所有容器、服務(wù)、持久卷等。讓我們逐行解釋代碼的作用:
-
NAMESPACE=demo
這一行指定了要?jiǎng)h除的命名空間的名稱,代碼中將其設(shè)置為 "demo"。你可以根據(jù)需要將 "demo" 替換為你要?jiǎng)h除的特定命名空間的名稱。 -
kubectl get ns $NAMESPACE -o json | jq '.spec.finalizers=[]' > ns.json
這一行代碼使用 kubectl 命令獲取指定命名空間的詳細(xì)信息,并將其以 JSON 格式輸出。然后通過 jq 工具(一個(gè)命令行 JSON 處理工具)將.spec.finalizers
的值設(shè)置為空數(shù)組,這樣做的目的是將命名空間中的 finalizer 清空。finalizer 是用于在刪除命名空間時(shí)執(zhí)行清理操作的機(jī)制。 -
kubectl proxy --port=8899 &
這一行代碼啟動(dòng)了一個(gè) kubectl 代理服務(wù)器,并監(jiān)聽在本地的 8899 端口上。代理服務(wù)器的目的是允許后續(xù)的 curl 請(qǐng)求與 Kubernetes API 進(jìn)行交互,從而繞過直接與集群通信的需求。 -
PID=$!
這一行代碼將 kubectl 代理服務(wù)器的進(jìn)程 ID 存儲(chǔ)在變量 PID 中。這樣做是為了在后續(xù)操作中能夠終止該進(jìn)程,以便清理代理服務(wù)器。 -
curl -X PUT http://localhost:8899/api/v1/namespaces/$NAMESPACE/finalize -H "Content-Type: application/json" --data-binary @ns.json
這一行代碼使用 curl 命令向 Kubernetes API 發(fā)出 PUT 請(qǐng)求,調(diào)用命名空間的 finalize 操作。在這個(gè)請(qǐng)求中,通過將之前生成的 ns.json 文件的內(nèi)容作為請(qǐng)求體,來執(zhí)行對(duì)命名空間的最終清理。由于之前已經(jīng)將 finalizer 清空,這個(gè)操作將立即刪除命名空間和其所有資源。 -
kill $PID
最后,這一行代碼終止之前啟動(dòng)的 kubectl 代理服務(wù)器,釋放占用的端口和資源。文章來源:http://www.zghlxwxcb.cn/news/detail-610166.html
需要注意的是,這段代碼執(zhí)行時(shí)需要確保當(dāng)前的環(huán)境配置有足夠的權(quán)限來刪除命名空間及其資源,否則可能會(huì)失敗。同時(shí),謹(jǐn)慎使用這樣的代碼,因?yàn)閯h除命名空間將導(dǎo)致其中的所有資源永久丟失,無法恢復(fù)。在生產(chǎn)環(huán)境中,務(wù)必謹(jǐn)慎執(zhí)行類似的操作,并確認(rèn)執(zhí)行之前的后果。文章來源地址http://www.zghlxwxcb.cn/news/detail-610166.html
到了這里,關(guān)于k8s的namespace一直處于terminating的解法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!