Kubernetes有一个内置的垃圾收集系统,可以清理不使用的镜像。它由Kubelet管理,它是Kubernetes 的工作进程并且在每个节点上运行。
Kubelet 会自动监控未使用的图像,并定期删除它们(https://kubernetes.io/docs/concepts/cluster-administration/kubelet-garbage-collection)。通过评估镜像的磁盘使用情况和最后使用时间来决定是否删除镜像。一个已经使用了一周的大镜像通常会在昨天使用的小镜像之前被清理干净。
通过指定磁盘使用率的高阈值和低阈值,您可以自定义垃圾收集何时运行。磁盘使用率高于“高”阈值将触发垃圾回收。该过程将尝试将磁盘使用率降低到“低”阈值。
阈值使用两个Kubelet标志定义:
• image-gc-high-threshold – 设置高阈值;默认为85%。
• image-gc-low-threshold – 设置低阈值;默认为80%。
这些设置应该已经在您的集群中处于活动状态。Kubelet将尝试在磁盘使用率达到85%后将其降低到80%。
你可以设置Kubectl 相关参数/var/lib/kubelet/kubeadm-flags.env:
KUBELET_KUBEADM_ARGS="--image-gc-high-threshold=60 --image-gc-low-threshold=50"
编辑文件后,重启Kubectl:
systemctl daemon-reloadsystemctl restart kubelet
清除旧容器
Kubelet 还负责处理冗余容器的清理。任何被拦截或身份不明的容器都将被删除。
您可以通过定义最小容器使用年限,在删除旧容器之前授予一个宽限期。附加的标志可以让你控制单个pod和节点上允许存在的死容器的总数:
• maximum-dead-containers – 可保留的旧容器的最大数量。当设置为1(默认值)时,不应用限制。
• maximum-dead-containers-per-container – 在每个容器的基础上设置要保留的旧实例的数量。如果容器被新实例替换,那么将允许保留这么多旧版本。
• minimum-container-ttl-duration – 废弃容器的垃圾回收宽限期。一旦容器存在了这么多分钟,它就有资格进行垃圾回收。默认值为0表示不设置宽限期。
您可以使用与上面描述的相同的过程使用Kubelet标志配置这些设置。
我应该手动干预吗?
您不应该手动删除死容器或镜像。如果磁盘空间被填满,或者垃圾收集似乎不起作用,请尝试将Kubelet标志调整为更积极的设置。
Kubernetes警告执行外部垃圾收集。不要使用集群管理api或第三方工具手动删除资源。这可能会造成不一致的状态,从而影响Kubelet的操作。
Kubelet负责管理分配给每个节点的容器。当调度一个新的容器时,Kubelet将下载它的镜像。成功的集群操作依赖于Kubelet的期望是否得到满足。缺少镜像或容器会导致Kubelet问题。
未来:驱逐
当前的Kubernetes版本支持上述设置。然而,他们正在反对一个更强大的“驱逐”制度。驱逐是清理Kubernetes资源的统一方式;它们最终将取代垃圾回收。
驱逐的发生有几个原因。Kubelet将监控多个因素,包括可用硬件资源和用户配置的保留期。
这个新系统促进了作为专用机制的垃圾收集的删除。由于内存不足,相同的进程终止pods将删除冗余的镜像,因为磁盘空间变得有限。
定义了两种类型的驱逐:硬和软。硬驱逐将立即采取行动删除目标资源。没有宽限期。软驱逐有一个用户配置的宽限期;一旦宽限期到期,该资源将成为目标。如果在宽限期内清除的原因得到解决,例如有更多的磁盘空间可用,则可以终止清除。
容器清理还不完全支持驱逐系统。deat-containers标志已经被弃用,以便将来使用。您已经可以将它用于容器镜像—设置—eviction-hart或--eviction-soft,而不是threshold 标志。
--eviction-hard=imagefs.available<1Gi
这个示例指示Kubelet删除所有未使用的容器镜像,如果镜像存储的可用磁盘空间低于1GB。
--eviction-soft=imagefs.available<1Gi--eviction-soft-grace-period=imagefs.available=5m
第二个例子展示了如何使用“软”驱逐。在这种情况下,除非可用磁盘空间低于1GB至少5分钟,否则不会删除镜像。
总结
Kubernetes默认启用了垃圾收集。死容器和冗余镜像将定期清除。默认计划的目标是磁盘使用率为80%或更低;容器一旦被拦截,就会被非常积极地清理。您可以使用Kubelet标志来调整流程中的阈值。文章来源:https://www.toymoban.com/news/detail-604104.html
垃圾收集这个概念最终将被淘汰,取而代之的是驱逐。驱逐有一个简化的配置,可以更好地与其他形式的资源删除保持一致。您可以在您的集群中设置驱逐。请记住,垃圾收集标志并不直接映射到它们的驱逐对应对象。文章来源地址https://www.toymoban.com/news/detail-604104.html
到了这里,关于如何清理Kubernetes集群中的旧容器和镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!