W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
本頁(yè)面向你展示如何設(shè)置在你的集群執(zhí)行垃圾收集 時(shí)要使用的級(jí)聯(lián)刪除 類(lèi)型。
你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒(méi)有集群,你可以通過(guò) Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:
你還需要?jiǎng)?chuàng)建一個(gè) Deployment 示例 以試驗(yàn)不同類(lèi)型的級(jí)聯(lián)刪除。你需要為每種級(jí)聯(lián)刪除類(lèi)型來(lái)重建 Deployment。
檢查確認(rèn)你的 Pods 上存在 ?ownerReferences
?字段:
kubectl get pods -l app=nginx --output=yaml
輸出中包含 ?ownerReferences
?字段,類(lèi)似這樣:
apiVersion: v1
...
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: nginx-deployment-6b474476c4
uid: 4fdcd81c-bd5d-41f7-97af-3a3b759af9a7
...
默認(rèn)情況下,Kubernetes 使用后臺(tái)級(jí)聯(lián)刪除 以刪除依賴(lài)某對(duì)象的其他對(duì)象。取決于你的集群所運(yùn)行的 Kubernetes 版本, 你可以使用 kubectl 或者 Kubernetes API 來(lái)切換到前臺(tái)級(jí)聯(lián)刪除。要檢查版本,請(qǐng)輸入 ?kubectl version
?。
你可以使用 ?kubectl
?或者 Kubernetes API 來(lái)基于前臺(tái)級(jí)聯(lián)刪除來(lái)刪除對(duì)象。
使用 kubectl
運(yùn)行下面的命令:
kubectl delete deployment nginx-deployment --cascade=foreground
使用 Kubernetes API
kubectl proxy --port=8080
curl
?來(lái)觸發(fā)刪除操作:curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deployment \
-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \
-H "Content-Type: application/json"
輸出中包含 ?foregroundDeletion
?finalizer, 類(lèi)似這樣:
"kind": "Deployment",
"apiVersion": "apps/v1",
"metadata": {
"name": "nginx-deployment",
"namespace": "default",
"uid": "d1ce1b02-cae8-4288-8a53-30e84d8fa505",
"resourceVersion": "1363097",
"creationTimestamp": "2021-07-08T20:24:37Z",
"deletionTimestamp": "2021-07-08T20:27:39Z",
"finalizers": [
"foregroundDeletion"
]
...
你可以通過(guò)調(diào)用 Kubernetes API 來(lái)基于前臺(tái)級(jí)聯(lián)刪除模式刪除對(duì)象。
kubectl proxy --port=8080
curl
?來(lái)觸發(fā)刪除操作:curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deployment \
-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \
-H "Content-Type: application/json"
輸出中包含 ?foregroundDeletion
?finalizer, 類(lèi)似這樣:
"kind": "Deployment",
"apiVersion": "apps/v1",
"metadata": {
"name": "nginx-deployment",
"namespace": "default",
"uid": "d1ce1b02-cae8-4288-8a53-30e84d8fa505",
"resourceVersion": "1363097",
"creationTimestamp": "2021-07-08T20:24:37Z",
"deletionTimestamp": "2021-07-08T20:27:39Z",
"finalizers": [
"foregroundDeletion"
]
...
kubectl
?或者 Kubernetes API 來(lái)刪除 Deployment。要檢查版本,請(qǐng)輸入 ?kubectl version
?。你可以使用 ?kubectl
?或者 Kubernetes API 來(lái)執(zhí)行后臺(tái)級(jí)聯(lián)刪除方式的對(duì)象刪除操作。
Kubernetes 默認(rèn)采用后臺(tái)級(jí)聯(lián)刪除方式,如果你在運(yùn)行下面的命令時(shí)不指定 ?--cascade
? 標(biāo)志或者 ?propagationPolicy
?參數(shù)時(shí),用這種方式來(lái)刪除對(duì)象。
使用 kubectl
運(yùn)行下面的命令:
kubectl delete deployment nginx-deployment --cascade=background
使用 Kubernetes API
kubectl proxy --port=8080
curl
?來(lái)觸發(fā)刪除操作:curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deployment \
-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Background"}' \
-H "Content-Type: application/json"
輸出類(lèi)似于:
"kind": "Status",
"apiVersion": "v1",
...
"status": "Success",
"details": {
"name": "nginx-deployment",
"group": "apps",
"kind": "deployments",
"uid": "cc9eefb9-2d49-4445-b1c1-d261c9396456"
}
Kubernetes 默認(rèn)采用后臺(tái)級(jí)聯(lián)刪除方式,如果你在運(yùn)行下面的命令時(shí)不指定 ?--cascade
? 標(biāo)志或者 ?propagationPolicy
?參數(shù)時(shí),用這種方式來(lái)刪除對(duì)象。
使用 kubectl
運(yùn)行下面的命令:
kubectl delete deployment nginx-deployment --cascade=true
使用 Kubernetes API
kubectl proxy --port=8080
curl
?來(lái)觸發(fā)刪除操作:curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deployment \
-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Background"}' \
-H "Content-Type: application/json"
輸出類(lèi)似于:
"kind": "Status",
"apiVersion": "v1",
...
"status": "Success",
"details": {
"name": "nginx-deployment",
"group": "apps",
"kind": "deployments",
"uid": "cc9eefb9-2d49-4445-b1c1-d261c9396456"
}
默認(rèn)情況下,當(dāng)你告訴 Kubernetes 刪除某個(gè)對(duì)象時(shí), 控制器 也會(huì)刪除依賴(lài)該對(duì)象 的其他對(duì)象。 取決于你的集群所運(yùn)行的 Kubernetes 版本,你也可以使用 ?kubectl
?或者 Kubernetes API 來(lái)讓 Kubernetes 孤立 這些依賴(lài)對(duì)象。要檢查版本,請(qǐng)輸入 ?kubectl version
?。
使用 kubectl
運(yùn)行下面的命令:
kubectl delete deployment nginx-deployment --cascade=orphan
使用 Kubernetes API
kubectl proxy --port=8080
curl
?來(lái)觸發(fā)刪除操作:curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deployment \
-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Orphan"}' \
-H "Content-Type: application/json"
輸出中在 ?finalizers
?字段中包含 ?orphan
?,如下所示:
"kind": "Deployment",
"apiVersion": "apps/v1",
"namespace": "default",
"uid": "6f577034-42a0-479d-be21-78018c466f1f",
"creationTimestamp": "2021-07-09T16:46:37Z",
"deletionTimestamp": "2021-07-09T16:47:08Z",
"deletionGracePeriodSeconds": 0,
"finalizers": [
"orphan"
],
...
使用 kubectl
運(yùn)行下面的命令:
kubectl delete deployment nginx-deployment --cascade=orphan
使用 Kubernetes API
kubectl proxy --port=8080
curl
?來(lái)觸發(fā)刪除操作:curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deployment \
-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Orphan"}' \
-H "Content-Type: application/json"
輸出中在 ?finalizers
?字段中包含 ?orphan
?,如下所示:
"kind": "Deployment",
"apiVersion": "apps/v1",
"namespace": "default",
"uid": "6f577034-42a0-479d-be21-78018c466f1f",
"creationTimestamp": "2021-07-09T16:46:37Z",
"deletionTimestamp": "2021-07-09T16:47:08Z",
"deletionGracePeriodSeconds": 0,
"finalizers": [
"orphan"
],
...
你可以檢查 Deployment 所管理的 Pods 仍然處于運(yùn)行狀態(tài):
kubectl get pods -l app=nginx
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: