Skip to content

Garbage Collection

参考

About Garbage Collection

  • KubernetesがCluster Resourcesのcleanupを行う仕組み
    • cleanup対象となるResourcesは以下のようなもの
      1. 終了したPod
      2. 完了したJob
      3. owner referenceのないオブジェクト
      4. 未使用のコンテナとコンテナイメージ
      5. StorageClassの再利用ポリシーがDeleteである動的にプロビジョニングされたPersistentVolume
      6. 失効または期限切れのCertificateSigningRequests (CSRs)
      7. 次のシナリオで削除されたNode:
      8. クラウド上でクラスターがクラウドコントローラーマネージャーを使用する場合
      9. オンプレミスでクラスターがクラウドコントローラーマネージャーと同様のアドオンを使用する場合
      10. Node Leaseオブジェクト

Owner References

Kubernetesでは依存関係にあるResourceが存在します。 例えば、ReplicaSet の定義に基づいてPodが作成される際、 metadata.ownerReferences フィールドにReplicaSetを特定する情報を保持します。 他にも、Service定義に基づいてEndpointSliceが作成されたり、KEDAのscaledObject作成時にHPAが存在しなければ併せて作成する (refs About KEDA)などKubernetesの多くのObjectは、metadata.ownerReferences を介して相互にリンクしています。

Kubernetesは、ReplicaSetを削除したときに残されたPodなど、owner referenceがなくなったObjectをチェックして削除します。

Cascading Deletion

KubernetesはReplicaSetを削除した時に残されたPodなどowner referenceがなくなったObjectをチェックして削除します。 owner referenceがなくなったObjectを削除するとき、カスケード削除と呼ばれるプロセスで依存関係にあるobjectを自動的に削除するかどうかを制御できます。

metadata.finalizers field

foreground cascading deletionでは metadata.finalizers フィールドを foregroundDeletion に設定します。 この metadata.finalizers fieldは削除対象としてマークされたリソースを完全に削除する前に、特定の条件が満たされるまでKubernetesを待機させるための名前空間付きのキーです。

finalizersの代表的な利用方法として、kubernetes.io/pv-protection があります。 これは PersistentVolume オブジェクトが誤って削除されるのを防ぐためのものです。 KubernetesはPodがPersistentVolume を利用中の場合は kubernetes.io/pv-protection finalizersを追加します。 kubernetes.io/pv-protection finalizersが追加されたPersistentVolumeを削除しようとした場合 Terminating Statusの状態で待機します。 PersistentVolume を利用しているPodがPersistentVolumeの利用を停止するとKubernetesは kubernetes.io/pv-protection finalizersを削除し、PersistentVolumeが削除されます。

Garbage Collectionにおいてowner objectの metadata.finalizersforegroundDeletion が設定された場合、 owner objectはすぐに削除されず、owner referenceにowner objectが設定されている(依存関係にある)object の削除が完了したら metadata.finalizers から foregroundDeletion が削除され、owner objectが削除されます。