W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在 Kubernetes 中,一些對象是其他對象的屬主(Owner)。 例如,ReplicaSet 是一組 Pod 的屬主。 具有屬主的對象是屬主的附屬(Dependent) 。
屬主關(guān)系不同于一些資源使用的標(biāo)簽和選擇算符機(jī)制。 例如,有一個(gè)創(chuàng)建 ?EndpointSlice
?對象的 Service, 該 Service 使用標(biāo)簽來讓控制平面確定,哪些 ?EndpointSlice
?對象屬于該 Service。 除開標(biāo)簽,每個(gè)代表 Service 所管理的 ?EndpointSlice
?都有一個(gè)屬主引用。 屬主引用避免 Kubernetes 的不同部分干擾到不受它們控制的對象。
附屬對象有一個(gè) ?metadata.ownerReferences
? 字段,用于引用其屬主對象。 一個(gè)有效的屬主引用,包含與附屬對象同在一個(gè)命名空間下的對象名稱和一個(gè) UID。 Kubernetes 自動(dòng)為一些對象的附屬資源設(shè)置屬主引用的值, 這些對象包含 ReplicaSet、DaemonSet、Deployment、Job、CronJob、ReplicationController 等。 你也可以通過改變這個(gè)字段的值,來手動(dòng)配置這些關(guān)系。 然而,你通常不需要這么做,你可以讓 Kubernetes 自動(dòng)管理附屬關(guān)系。
附屬對象還有一個(gè) ?ownerReferences.blockOwnerDeletion
? 字段,該字段使用布爾值, 用于控制特定的附屬對象是否可以阻止垃圾收集刪除其屬主對象。 如果控制器(例如 Deployment 控制器) 設(shè)置了 ?metadata.ownerReferences
? 字段的值,Kubernetes 會(huì)自動(dòng)設(shè)置 ?blockOwnerDeletion
?的值為 ?true
?。 你也可以手動(dòng)設(shè)置 ?blockOwnerDeletion
?字段的值,以控制哪些附屬對象會(huì)阻止垃圾收集。
根據(jù)設(shè)計(jì),kubernetes 不允許跨名字空間指定屬主。 名字空間范圍的附屬可以指定集群范圍的或者名字空間范圍的屬主。 名字空間范圍的屬主必須和該附屬處于相同的名字空間。 如果名字空間范圍的屬主和附屬不在相同的名字空間,那么該屬主引用就會(huì)被認(rèn)為是缺失的, 并且當(dāng)附屬的所有屬主引用都被確認(rèn)不再存在之后,該附屬就會(huì)被刪除。
集群范圍的附屬只能指定集群范圍的屬主。 在 v1.20+ 版本,如果一個(gè)集群范圍的附屬指定了一個(gè)名字空間范圍類型的屬主, 那么該附屬就會(huì)被認(rèn)為是擁有一個(gè)不可解析的屬主引用,并且它不能夠被垃圾回收。
在 v1.20+ 版本,如果垃圾收集器檢測到無效的跨名字空間的屬主引用, 或者一個(gè)集群范圍的附屬指定了一個(gè)名字空間范圍類型的屬主, 那么它就會(huì)報(bào)告一個(gè)警告事件。該事件的原因是 ?OwnerRefInvalidNamespace
?, ?involvedObject
?屬性中包含無效的附屬。 你可以運(yùn)行 ?kubectl get events -A --field-selector=reason=OwnerRefInvalidNamespace
? 來獲取該類型的事件。
當(dāng)你告訴 Kubernetes 刪除一個(gè)資源,API 服務(wù)器允許管理控制器處理該資源的任何 Finalizer 規(guī)則。 Finalizer 防止意外刪除你的集群所依賴的、用于正常運(yùn)作的資源。 例如,如果你試圖刪除一個(gè)仍被 Pod 使用的 ?PersistentVolume
?,該資源不會(huì)被立即刪除, 因?yàn)?nbsp;?PersistentVolume
?有 ?kubernetes.io/pv-protection
? Finalizer。 相反,它將進(jìn)入 ?Terminating
?狀態(tài),直到 Kubernetes 清除這個(gè) Finalizer, 而這種情況只會(huì)發(fā)生在 ?PersistentVolume
?不再被掛載到 Pod 上時(shí)。
當(dāng)你使用前臺(tái)或孤立級(jí)聯(lián)刪除時(shí), Kubernetes 也會(huì)向?qū)僦髻Y源添加 Finalizer。 在前臺(tái)刪除中,會(huì)添加 ?foreground
?Finalizer,這樣控制器必須在刪除了擁有 ?ownerReferences.blockOwnerDeletion=true
? 的附屬資源后,才能刪除屬主對象。 如果你指定了孤立刪除策略,Kubernetes 會(huì)添加 ?orphan
?Finalizer, 這樣控制器在刪除屬主對象后,會(huì)忽略附屬資源。
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)系方式:
更多建議: