擁有者與依賴物件

在 Kubernetes 中,某些 物件 是其他物件的擁有者。 例如,ReplicaSet 是一組 Pod 的擁有者。 這些擁有的物件是其擁有者的從屬

所有權與某些資源也使用的 標籤和選擇器 機制不同。 例如,考慮建立 EndpointSlice 物件的服務。 服務使用 標籤,讓控制平面能夠判斷哪些 EndpointSlice 物件用於該服務。 除了標籤之外,每個代表服務管理的 EndpointSlice 都有一個擁有者參考。 擁有者參考有助於 Kubernetes 的不同部分避免干擾它們不控制的物件。

物件規格中的擁有者參考

從屬物件會有一個 metadata.ownerReferences 欄位,參考到它們的擁有者物件。一個有效的擁有者參考包含物件名稱以及一個 UID,該 UID 必須與從屬物件在同一個命名空間 內。Kubernetes 會自動為其他物件的從屬物件設定此欄位的值,例如 ReplicaSets、DaemonSets、Deployments、Jobs、CronJobs 和 ReplicationControllers。您也可以透過變更此欄位的值來手動設定這些關係。然而,您通常不需要這樣做,可以讓 Kubernetes 自動管理這些關係。

從屬物件也有一個 ownerReferences.blockOwnerDeletion 欄位,該欄位接受布林值,並控制特定的從屬物件是否可以阻止垃圾收集刪除它們的擁有者物件。如果控制器(例如,Deployment 控制器)設定了 metadata.ownerReferences 欄位的值,Kubernetes 會自動將此欄位設定為 true。您也可以手動設定 blockOwnerDeletion 欄位的值,以控制哪些從屬物件阻止垃圾收集。

Kubernetes 許可控制器根據擁有者的刪除權限,控制使用者變更從屬資源的這個欄位的存取權限。此控制機制可防止未經授權的使用者延遲擁有者物件的刪除。

所有權與 Finalizers

當您告訴 Kubernetes 刪除資源時,API 伺服器允許管理控制器處理該資源的任何 finalizer 規則Finalizers 可以防止意外刪除您的叢集可能仍然需要正常運作的資源。例如,如果您嘗試刪除仍然被 Pod 使用的 PersistentVolume,則刪除不會立即發生,因為 PersistentVolume 上有 kubernetes.io/pv-protection finalizer。相反地,volume 會保持在 Terminating 狀態,直到 Kubernetes 清除 finalizer 為止,而這只會在 `PersistentVolume` 不再綁定到 Pod 之後才會發生。

當您使用前景或孤立級聯刪除時,Kubernetes 也會將 finalizer 新增到擁有者資源。在前景刪除中,它會新增 foreground finalizer,以便控制器在刪除擁有者之前,必須先刪除也具有 ownerReferences.blockOwnerDeletion=true 的從屬資源。如果您指定孤立刪除策略,Kubernetes 會新增 orphan finalizer,以便控制器在刪除擁有者物件後忽略從屬資源。

下一步

上次修改時間:2022 年 1 月 8 日下午 6:09 PST:重新組織 Kubernetes 物件操作區段 (634c17f61c)