运维应如何配置Kubernetes的垃圾回收

运维
垃圾回收是指清理 Kubernetes 集群资源的机制,这对于集群的运行状况非常重要。垃圾回收可以清理资源,例如终止的 Pod、已完成的作业、未使用的容器等。

垃圾回收是指清理 Kubernetes 集群资源的机制,这对于集群的运行状况非常重要。垃圾回收可以清理资源,例如终止的 Pod、已完成的作业、未使用的容器等。

垃圾回收可维护 Kubernetes 集群的运行状况。管理员首先要确定他们应使用默认的自动清理,还是手动配置垃圾回收。

垃圾回收配置

有几种配置可以帮助组织获得对垃圾回收的控制权。

ownerReference元数据字段Kubernetes 使用一个名为metadata.ownerReference的元数据字段来设置资源的从属关系。Kubernetes 可以在删除父资源后清理所有拥有的子资源。

例如,一个部署拥有一个 ReplicaSet,该 ReplicaSet 拥有该 ReplicaSet 中的 Pod。因此,当 admin 或 K8s 之外的其他工具删除部署时,ReplicaSet 和 pod 也会通过引用删除。

可以通过将metadata.blockOwnerDeletion字段设置为 true 来更改此行为。如果设置为 true,则在删除父资源后,资源将保持不变。

镜像

默认情况下,在每个节点上运行的 kubelet 每两分钟删除一次未使用的镜像。要配置此设置,请使用 kubelet 配置文件并为imageMinimumGCAge字段提供持续时间值。

为了触发图像垃圾回收,kubelet 会考虑磁盘使用情况。使用两个可配置字段 HighThresholdPercent 和 LowThresholdPercent,根据上次使用图像的时间删除图像。当磁盘空间达到 HighThresholdPercent 中设置的值时,kublet 将从最早的图像开始。在达到 LowThresholdPercent 中设置的值之前,kubelet 将继续删除图片。

容器

未使用的容器每五分钟清理一次。通过使用标志 --maximum-dead-containers-per-container和containers--minimum-container-ttl-duration 来控制清理的特定行为。

--maximum-dead-containers-per-container全局设置在垃圾回收移除或删除已停止的容器之前要保留的最大容器数。在 kubelet 启动时,默认情况下将其设置为 -1,或者管理员可以手动设置它。这意味着在触发垃圾回收之前,集群上允许的已停止容器数量没有限制。

containers--minimum-container-ttl-duration设置每个容器要保留的旧容器实例数。此值的默认值设置为 1。控制容器垃圾回收前的持续时间。此值设置为 0,表示默认情况下此设置处于禁用状态。

Kubernetes 作业

Kubernetes 作业完成后,除非默认情况下触发了其他垃圾回收条件,否则已完成的作业和 pod 将保持不变。例如,如果触发了 kube-controller-manager 的 terminated-pod-gc-threshold 设置,则在垃圾回收开始删除 Pod 之前,终止的 Pod 数量有限。在大多数情况下,终止的 Pod 将保留一段时间,因为默认值设置为 12,500 个 Pod。

设置作业的字段以控制此行为。此字段确定在作业完成后经过多少秒,然后 TTL 控制器才会删除该作业。建议使用此字段,因为替代项是 的默认删除策略。使用 ,作业完成后,由 Jobs 启动的 pod 将被孤立。如果建立多个孤立的 Pod,这可能会导致性能下降。设置一个值以确保 Pod 在作业完成后删除。

终结器

要向 Kubernetes 指示在资源删除之前要执行特定操作,请使用清单文件创建一个资源并设置metadata.finalizers字段。

终结器类似于注释。真正的魔力在于管理终结器的控制器。例如,在使用 PersistentVolume 时,通常使用kubernetes.io/pv-protection 的终结器。这样可以防止 PersistentVolume 被管理员删除,或者可以防止在删除终结器之前删除 pod 的自动化进程。如果 Pod 正在使用被删除的 PersistentVolume,则资源会被标记为 Terminating,但在删除终结器键之前无法删除。持久卷控制器只会在 Pod 停止使用 PersistentVolume 时清除终结器,这让控制器可以删除 PersistentVolume。


责任编辑:华轩 来源: IT微工场
相关推荐

2020-07-09 08:26:42

Kubernetes容器开发

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2020-10-30 08:34:58

Kubernetes运维技巧

2021-01-04 10:08:07

垃圾回收Java虚拟机

2022-01-20 10:34:49

JVM垃圾回收算法

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2021-03-03 08:13:57

模式垃圾回收

2019-12-27 10:33:43

运维架构技术

2021-11-05 15:23:20

JVM回收算法

2020-11-18 10:54:29

垃圾回收器演进

2016-08-02 15:54:42

运维人员技术素质培训要求

2022-06-22 09:54:45

JVM垃圾回收Java

2009-07-06 17:34:22

Java垃圾回收

2009-12-30 10:14:29

JVM垃圾回收

2018-06-25 11:32:40

2019-04-12 08:38:02

2022-05-31 10:30:23

KubernetesCalico运维

2009-06-25 17:48:24

Java垃圾回收

2023-12-19 21:52:51

Go垃圾回收开发

2010-12-13 11:14:04

Java垃圾回收算法
点赞
收藏

51CTO技术栈公众号