W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Finalizer 是帶有命名空間的鍵,告訴 Kubernetes 等到特定的條件被滿足后, 再完全刪除被標(biāo)記為刪除的資源。 Finalizer 提醒控制器清理被刪除的對(duì)象擁有的資源。
當(dāng)你告訴 Kubernetes 刪除一個(gè)指定了 Finalizer 的對(duì)象時(shí), Kubernetes API 通過填充 ?.metadata.deletionTimestamp
? 來標(biāo)記要?jiǎng)h除的對(duì)象, 并返回?202
?狀態(tài)碼 (HTTP "已接受") 使其進(jìn)入只讀狀態(tài)。 此時(shí)控制平面或其他組件會(huì)采取 Finalizer 所定義的行動(dòng), 而目標(biāo)對(duì)象仍然處于終止中(Terminating)的狀態(tài)。 這些行動(dòng)完成后,控制器會(huì)刪除目標(biāo)對(duì)象相關(guān)的 Finalizer。 當(dāng) ?metadata.finalizers
? 字段為空時(shí),Kubernetes 認(rèn)為刪除已完成。
你可以使用 Finalizer 控制資源的垃圾收集。 例如,你可以定義一個(gè) Finalizer,在刪除目標(biāo)資源前清理相關(guān)資源或基礎(chǔ)設(shè)施。
你可以通過使用 Finalizers 提醒控制器 在刪除目標(biāo)資源前執(zhí)行特定的清理任務(wù), 來控制資源的垃圾收集。
Finalizers 通常不指定要執(zhí)行的代碼。 相反,它們通常是特定資源上的鍵的列表,類似于注解。 Kubernetes 自動(dòng)指定了一些 Finalizers,但你也可以指定你自己的。
當(dāng)你使用清單文件創(chuàng)建資源時(shí),你可以在 ?metadata.finalizers
? 字段指定 Finalizers。 當(dāng)你試圖刪除該資源時(shí),處理刪除請(qǐng)求的 API 服務(wù)器會(huì)注意到 ?finalizers
? 字段中的值, 并進(jìn)行以下操作:
metadata.deletionTimestamp
? 字段。
metadata.finalizers
? 字段為空。
202
? 狀態(tài)碼(HTTP "Accepted")。管理 finalizer 的控制器注意到對(duì)象上發(fā)生的更新操作,對(duì)象的 ?metadata.deletionTimestamp
? 被設(shè)置,意味著已經(jīng)請(qǐng)求刪除該對(duì)象。然后,控制器會(huì)試圖滿足資源的 Finalizers 的條件。 每當(dāng)一個(gè) Finalizer 的條件被滿足時(shí),控制器就會(huì)從資源的 ?finalizers
?字段中刪除該鍵。 當(dāng) ?finalizers
?字段為空時(shí),?deletionTimestamp
?字段被設(shè)置的對(duì)象會(huì)被自動(dòng)刪除。 你也可以使用 Finalizers 來阻止刪除未被管理的資源。
一個(gè)常見的 Finalizer 的例子是 ?kubernetes.io/pv-protection
?, 它用來防止意外刪除 ?PersistentVolume
?對(duì)象。 當(dāng)一個(gè) ?PersistentVolume
?對(duì)象被 Pod 使用時(shí), Kubernetes 會(huì)添加 ?pv-protection
? Finalizer。 如果你試圖刪除 ?PersistentVolume
?,它將進(jìn)入 ?Terminating
?狀態(tài), 但是控制器因?yàn)樵?nbsp;Finalizer 存在而無法刪除該資源。 當(dāng) Pod 停止使用 ?PersistentVolume
?時(shí), Kubernetes 清除 ?pv-protection
? Finalizer,控制器就會(huì)刪除該卷。
與標(biāo)簽類似, 屬主引用 描述了 Kubernetes 中對(duì)象之間的關(guān)系,但它們作用不同。 當(dāng)一個(gè)控制器 管理類似于 Pod 的對(duì)象時(shí),它使用標(biāo)簽來跟蹤相關(guān)對(duì)象組的變化。 例如,當(dāng) Job 創(chuàng)建一個(gè)或多個(gè) Pod 時(shí), Job 控制器會(huì)給這些 Pod 應(yīng)用上標(biāo)簽,并跟蹤集群中的具有相同標(biāo)簽的 Pod 的變化。
Job 控制器還為這些 Pod 添加了屬主引用,指向創(chuàng)建 Pod 的 Job。 如果你在這些 Pod 運(yùn)行的時(shí)候刪除了 Job, Kubernetes 會(huì)使用屬主引用(而不是標(biāo)簽)來確定集群中哪些 Pod 需要清理。
當(dāng) Kubernetes 識(shí)別到要?jiǎng)h除的資源上的屬主引用時(shí),它也會(huì)處理 Finalizers。
在某些情況下,F(xiàn)inalizers 會(huì)阻止依賴對(duì)象的刪除, 這可能導(dǎo)致目標(biāo)屬主對(duì)象被保留的時(shí)間比預(yù)期的長,而沒有被完全刪除。 在這些情況下,你應(yīng)該檢查目標(biāo)屬主和附屬對(duì)象上的 Finalizers 和屬主引用,來排查原因。
在對(duì)象卡在刪除狀態(tài)的情況下,要避免手動(dòng)移除 Finalizers,以允許繼續(xù)刪除操作。 Finalizers 通常因?yàn)樘厥庠虮惶砑拥劫Y源上,所以強(qiáng)行刪除它們會(huì)導(dǎo)致集群出現(xiàn)問題。 只有了解 finalizer 的用途時(shí)才能這樣做,并且應(yīng)該通過一些其他方式來完成 (例如,手動(dòng)清除其余的依賴對(duì)象)。
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)系方式:
更多建議: