所有者和從屬

在 Kubernetes 中,一些物件是其他物件的“所有者”(owner)。例如,一個ReplicaSet 是一組 Pod 的所有者。這些被擁有的物件是其所有者的“從屬”(dependent)。

所有權不同於某些資源也使用的標籤和選擇器機制。例如,考慮一個建立 EndpointSlice 物件的 Service。Service 使用標籤來允許控制平面確定哪些 EndpointSlice 物件用於該 Service。除了標籤之外,每個代表 Service 管理的 EndpointSlice 都有一個所有者引用。所有者引用有助於 Kubernetes 的不同部分避免干擾它們不控制的物件。

物件規範中的所有者引用

從屬物件有一個 metadata.ownerReferences 欄位,它引用了其所有者物件。一個有效的所有者引用包括物件名稱和與從屬物件在同一名稱空間中的UID。Kubernetes 會自動為 ReplicaSets、DaemonSets、Deployments、Jobs、CronJobs 和 ReplicationControllers 等其他物件的從屬物件設定此欄位的值。你也可以透過手動更改此欄位的值來配置這些關係。但是,通常你不需要這樣做,可以允許 Kubernetes 自動管理這些關係。

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

Kubernetes 准入控制器根據所有者的刪除許可權控制使用者更改從屬資源此欄位的訪問許可權。此控制可防止未經授權的使用者延遲所有者物件的刪除。

所有權和終結器

當你告訴 Kubernetes 刪除一個資源時,API 伺服器允許管理控制器處理該資源的任何終結器規則終結器可以防止你的叢集可能仍然需要正常執行的資源被意外刪除。例如,如果你嘗試刪除一個 Pod 仍在使用的PersistentVolume,刪除不會立即發生,因為該 PersistentVolume 上有 kubernetes.io/pv-protection 終結器。相反,會保持在 Terminating 狀態,直到 Kubernetes 清除終結器,這隻會在 PersistentVolume 不再繫結到 Pod 之後發生。

當你使用前臺或孤兒級聯刪除時,Kubernetes 還會為所有者資源新增終結器。在前臺刪除中,它會新增 foreground 終結器,以便控制器必須先刪除也具有 ownerReferences.blockOwnerDeletion=true 的從屬資源,然後才能刪除所有者。如果你指定孤兒刪除策略,Kubernetes 會新增 orphan 終結器,以便控制器在刪除所有者物件後忽略從屬資源。

下一步

上次修改時間:2022 年 1 月 8 日下午 6:09 PST:重新組織“使用 Kubernetes 物件”部分 (634c17f61c)