1.5.5. 垃圾回收

k8s的垃圾回收的作用是删除某些曾经拥有属主但是 现在没有属主的对象。

1.5.5.1. 属主和附属

某些 Kubernetes 对象是其它一些对象的属主。 例如,一个 ReplicaSet 是一组 Pod 的属主。 具有属主的对象被称为是属主的 附属 。 每个附属对象具有一个指向其所属对象的 metadata.ownerReferences 字段。

1.5.5.2. 控制垃圾收集器删除附属

删除对象的时候可以级联删除的, 删除模式可以是后台模式和前台模式的。

如果删除对象,不删除他的附属对象,那么这些附属对象就是孤立对象。

1.5.5.3. 前台级联删除

  • 对象仍然可以通过rest api 可见

  • 对象的deletionTimestamp字段被设置。

  • 对象的metadata.finalizers字段包含foregroundDeletion。

1.5.5.4. 后台级联删除

在 后台级联删除 模式下,Kubernetes 会立即删除属主对象,之后垃圾收集器 会在后台删除其附属对象。

1.5.5.5. 删除样例

# 启动一个代理
kubectl proxy --port=8080

# 后台删除
curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/replicasets/my-repset \
-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Background"}' \
-H "Content-Type: application/json"

# 前台删除
curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/replicasets/my-repset \
-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \
-H "Content-Type: application/json"

# 让辅助成为孤立对象
curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/replicasets/my-repset \
-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Orphan"}' \
-H "Content-Type: application/json"

# kubeclt方式
kubectl delete replicaset my-repset --cascade=orphan