如何清理Kubernetes集群中的旧容器和镜像

这篇具有很好参考价值的文章主要介绍了如何清理Kubernetes集群中的旧容器和镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

到了这里,关于如何清理Kubernetes集群中的旧容器和镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手动拉取 Kubernetes kubeadm 使用的容器镜像

    使用kubeadmin 设置 Kubernetes 集群时,会使用一个 init 命令选项来设置 Kubernetes 控制平面。Kubernetes 有许多将在引导集群时使用的容器镜像。 在互联网访问不可靠的环境中,或者当您使用代理服务器时互联网访问受限,或者如果您的 Kubernetes 节点根本没有互联网访问权限,预拉要

    2024年02月13日
    浏览(35)
  • 【基于容器的部署、扩展和管理】3.1 容器编排系统和Kubernetes集群的构建

    往期回顾: 第一章:【云原生概念和技术】 第二章:【容器化应用程序设计和开发】 基于容器的部署、扩展和管理是一种现代软件开发和部署的方式,它提供了快速、可重复、可移植的开发和部署流程,同时也简化了应用程序的扩展和管理。 在基于容器的部署中,应用程序

    2024年02月08日
    浏览(46)
  • K8s集群使用容器镜像仓库Harbor

    1.1.1 docker-ce安装 1.1.1.1 获取YUM源 使用阿里云开源软件镜像站。 1.1.1.2 安装并设置启动及开机自启动 1.1.2 docker compose安装 1.1.3 获取harbor安装文件 1.1.4 修改配置文件 1.1.5 执行预备脚本 1.1.6 执行安装脚本 1.1.7 验证运行情况 1.1.8 访问harbor UI界面 2.1.1 新建一个harbor私有仓库 2.1.2

    2024年02月02日
    浏览(64)
  • 云原生之容器编排实践-基于CentOS7搭建三个节点的Kubernetes集群

    前面采用 minikube 作为 Kubernetes 环境来体验学习 Kubernetes 基本概念与操作,这样避免了初学者在裸金属主机上搭建 Kubernetes 集群的复杂度,但是随着产品功能的逐渐完善,我们需要过渡到生产环境中的 K8S 集群模式;而在实际上生产环境之前,我们先在本地虚拟机上进行了环境

    2024年02月19日
    浏览(50)
  • 【云原生 | Kubernetes 系列】— 部署K8S 1.28版本集群部署(基于Containerd容器运行)

    主机名 IP地址 备注 k8s-master01 192.168.0.109 master k8s-node1 192.168.0.108 node1 k8s-node2 192.168.0.107 node1 k8s-node3 192.168.0.105 node1 1、主机配置 2、升级内核 3、配置内核转发以及过滤 4、安装ipset ipvsadm,IPVS(IP Virtual Server)是一个用于负载均衡的 Linux 内核模块,它可以用来替代 kube-proxy 默认的

    2024年02月20日
    浏览(77)
  • 【云原生|Kubernetes】08-Pod中的Init容器

    Init 容器是一种特殊容器,在 Pod内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 你可以在 Pod 的spec中与用来描述应用容器的 containers 数组平行的位置指定 Init 容器。 Init 容器的状态在 status.initContainerStatuses 字段中以容器状态数组

    2024年02月09日
    浏览(51)
  • 如何安全的清理/var 下的docker临时文件,在不停用docker正在运行的容器情况下

    在不停止正在运行的 Docker 容器的情况下清理 `/var` 目录下的临时文件有一定的风险,因为这可能导致正在运行的容器出现问题。然而,你可以尝试以下方法来减小对正在运行的容器的影响: 1. 删除悬空镜像: 悬空镜像是没有与任何容器关联的镜像。你可以运行以下命令来删

    2024年02月09日
    浏览(59)
  • 云原生之容器编排实践-在K8S集群中使用Registry2搭建私有镜像仓库

    基于前面搭建的3节点 Kubernetes 集群,今天我们使用 Registry2 搭建私有镜像仓库,这在镜像安全性以及离线环境下运维等方面具有重要意义。 Note: 由于是测试环境,以下创建了一个 local-storage 的 StorageClass ,并使用本地磁盘的方式创建使用 PV ,实际建议使用 NFS 。 共用到了三台

    2024年02月19日
    浏览(45)
  • IDEA远程调试kubernetes环境中的容器应用(Java应用)

    IDEA远程调试kubernetes环境中的容器应用(Java应用) 应用场景:Java开发的项目在本地运行正常,然后将 容器运行方式的项目发布到远端服务器上线运行后,出现了异常情况,此时频繁去修改代码发布镜像进行问题验证,将耗费较大的时间成本。 为了提高问题定位和代码调试效率

    2024年02月10日
    浏览(51)
  • Linux如何清理Redis中的缓存

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包