• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

Kubernetes&垃圾收集器:试图删除使用的图像

docker 来源:Nicola Benaglia 7次浏览

我的k8s群集的节点尝试删除容器使用的图像。Kubernetes&垃圾收集器:试图删除使用的图像

这种行为对我来说似乎很陌生。

这里的日志:

kubelet: I1218 12:44:19.925831 11177 image_gc_manager.go:334] [imageGCManager]: Removing image "sha256:99e59f495ffaa222bfeb67580213e8c28c1e885f1d245ab2bbe3b1b1ec3bd0b2" to free 746888 bytes 
kubelet: E1218 12:44:19.928742 11177 remote_image.go:130] RemoveImage "sha256:99e59f495ffaa222bfeb67580213e8c28c1e885f1d245ab2bbe3b1b1ec3bd0b2" from image service failed: rpc error: code = Unknown desc = Error response from daemon: conflict: unable to delete 99e59f495ffa (cannot be forced) - image is being used by running container 6f236a385a8e 
kubelet: E1218 12:44:19.928793 11177 kuberuntime_image.go:126] Remove image "sha256:99e59f495ffaa222bfeb67580213e8c28c1e885f1d245ab2bbe3b1b1ec3bd0b2" failed: rpc error: code = Unknown desc = Error response from daemon: conflict: unable to delete 99e59f495ffa (cannot be forced) - image is being used by running container 6f236a385a8e 
kubelet: W1218 12:44:19.928821 11177 eviction_manager.go:435] eviction manager: unexpected error when attempting to reduce nodefs pressure: wanted to free 9223372036854775807 bytes, but freed 0 bytes space with errors in image deletion: rpc error: code = Unknown desc = Error response from daemon: conflict: unable to delete 99e59f495ffa (cannot be forced) - image is being used by running container 6f236a385a8e 

有什么建议? 手动删除Docker镜像并在节点上停止容器会导致此类问题?

预先感谢您。

===========解决方案如下:

据我所知,Kubelet有一个垃圾收集器,目的是为了利用资源去除不必要的k8s对象。

如果对象不属于任何所有者,则表示它是孤儿。 Kubernetes中有一种模式,在kubernetes中被称为所有权。

对于实例,如果应用部署对象,那么它将创建一个replicaSet对象,进一步ResplicaSet将创建pods对象。

所以,所有权流

部署< == RepicaSet < ===波德

现在,如果你删除部署对象,这意味着ReplicaSet没有所有者,然后垃圾收集器会尝试删除ReplicaSet现在荚没有拥有者,因此,GC会尝试删除豆荚。

有一个名为ownerReferences其描述了在所有这些对象诸如部署,ReplicaSet,豆荚等的关系字段

有3种方法中Kubernetes删除对象。

  • 前景:如果您尝试删除部署,那么在部署将被删除后,将删除第一个窗格,然后复制窗格。
  • 背景:如果您尝试删除部署,则第一次部署将被删除现在,GC将删除复制品和Pod。
  • 孤儿:如果删除部署,则Repicaset将成为孤儿,GC将删除所有这些孤儿对象。

解决您的问题

在我看来,你的POD(容器)是孤立的,因此,GC是确保它是从集群中移除。

如果你想检查ownerRererences状态:

kubectl get pod $PODNAME -o yaml 

在元数据部分,将有足够的信息。

我已附上进一步研究的参考资料。

garbage-collection

garbage-collection-k8s


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)