新聞中心
屬主與附屬
在 Kubernetes 中,一些對象是其他對象的屬主(Owner)。 例如,ReplicaSet 是一組 Pod 的屬主。 具有屬主的對象是屬主的附屬(Dependent) 。

創(chuàng)新互聯(lián)建站是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計,網(wǎng)站模板,微信公眾號開發(fā),軟件開發(fā),微信平臺小程序開發(fā),十余年建站對水泥攪拌車等多個領(lǐng)域,擁有豐富的網(wǎng)站推廣經(jīng)驗。
屬主關(guān)系不同于一些資源使用的標(biāo)簽和選擇算符機制。 例如,有一個創(chuàng)建 ?EndpointSlice ?對象的 Service, 該 Service 使用標(biāo)簽來讓控制平面確定,哪些 ?EndpointSlice ?對象屬于該 Service。 除開標(biāo)簽,每個代表 Service 所管理的 ?EndpointSlice ?都有一個屬主引用。 屬主引用避免 Kubernetes 的不同部分干擾到不受它們控制的對象。
對象規(guī)約中的屬主引用
附屬對象有一個 ?metadata.ownerReferences? 字段,用于引用其屬主對象。 一個有效的屬主引用,包含與附屬對象同在一個命名空間下的對象名稱和一個 UID。 Kubernetes 自動為一些對象的附屬資源設(shè)置屬主引用的值, 這些對象包含 ReplicaSet、DaemonSet、Deployment、Job、CronJob、ReplicationController 等。 你也可以通過改變這個字段的值,來手動配置這些關(guān)系。 然而,你通常不需要這么做,你可以讓 Kubernetes 自動管理附屬關(guān)系。
附屬對象還有一個 ?ownerReferences.blockOwnerDeletion? 字段,該字段使用布爾值, 用于控制特定的附屬對象是否可以阻止垃圾收集刪除其屬主對象。 如果控制器(例如 Deployment 控制器) 設(shè)置了 ?metadata.ownerReferences? 字段的值,Kubernetes 會自動設(shè)置 ?blockOwnerDeletion ?的值為 ?true?。 你也可以手動設(shè)置 ?blockOwnerDeletion ?字段的值,以控制哪些附屬對象會阻止垃圾收集。
根據(jù)設(shè)計,kubernetes 不允許跨名字空間指定屬主。 名字空間范圍的附屬可以指定集群范圍的或者名字空間范圍的屬主。 名字空間范圍的屬主必須和該附屬處于相同的名字空間。 如果名字空間范圍的屬主和附屬不在相同的名字空間,那么該屬主引用就會被認(rèn)為是缺失的, 并且當(dāng)附屬的所有屬主引用都被確認(rèn)不再存在之后,該附屬就會被刪除。
集群范圍的附屬只能指定集群范圍的屬主。 在 v1.20+ 版本,如果一個集群范圍的附屬指定了一個名字空間范圍類型的屬主, 那么該附屬就會被認(rèn)為是擁有一個不可解析的屬主引用,并且它不能夠被垃圾回收。
在 v1.20+ 版本,如果垃圾收集器檢測到無效的跨名字空間的屬主引用, 或者一個集群范圍的附屬指定了一個名字空間范圍類型的屬主, 那么它就會報告一個警告事件。該事件的原因是 ?
OwnerRefInvalidNamespace?, ?
involvedObject?屬性中包含無效的附屬。 你可以運行 ?
kubectl get events -A --field-selector=reason=OwnerRefInvalidNamespace? 來獲取該類型的事件。
屬主關(guān)系與 Finalizer
當(dāng)你告訴 Kubernetes 刪除一個資源,API 服務(wù)器允許管理控制器處理該資源的任何 Finalizer 規(guī)則。 Finalizer 防止意外刪除你的集群所依賴的、用于正常運作的資源。 例如,如果你試圖刪除一個仍被 Pod 使用的 ?PersistentVolume?,該資源不會被立即刪除, 因為 ?PersistentVolume ?有 ?kubernetes.io/pv-protection? Finalizer。 相反,它將進(jìn)入 ?Terminating ?狀態(tài),直到 Kubernetes 清除這個 Finalizer, 而這種情況只會發(fā)生在 ?PersistentVolume ?不再被掛載到 Pod 上時。
當(dāng)你使用前臺或孤立級聯(lián)刪除時, Kubernetes 也會向?qū)僦髻Y源添加 Finalizer。 在前臺刪除中,會添加 ?foreground ?Finalizer,這樣控制器必須在刪除了擁有 ?ownerReferences.blockOwnerDeletion=true? 的附屬資源后,才能刪除屬主對象。 如果你指定了孤立刪除策略,Kubernetes 會添加 ?orphan ?Finalizer, 這樣控制器在刪除屬主對象后,會忽略附屬資源。
當(dāng)前名稱:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes 屬主與附屬
文章轉(zhuǎn)載:http://m.5511xx.com/article/cojhsge.html


咨詢
建站咨詢
