From 2f114f92a8e847e2f7ae73fcfe37d605f7896254 Mon Sep 17 00:00:00 2001 From: SataQiu <1527062125@qq.com> Date: Mon, 10 Dec 2018 18:31:07 +0800 Subject: [PATCH] zh-trans: add docs/concepts/cluster-administration/kubelet-garbage-collection.md (#11510) * zh-trans: add docs/concepts/cluster-administration/kubelet-garbage-collection.md * update kubelet-garbage-collection.md * update kubelet-garbage-collection.md * update kubelet-garbage-collection.md --- .../kubelet-garbage-collection.md | 267 ++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 content/zh/docs/concepts/cluster-administration/kubelet-garbage-collection.md diff --git a/content/zh/docs/concepts/cluster-administration/kubelet-garbage-collection.md b/content/zh/docs/concepts/cluster-administration/kubelet-garbage-collection.md new file mode 100644 index 0000000000..8557ae8692 --- /dev/null +++ b/content/zh/docs/concepts/cluster-administration/kubelet-garbage-collection.md @@ -0,0 +1,267 @@ +--- +title: 配置 kubelet 垃圾回收策略 +content_template: templates/concept +weight: 70 +--- + + + +{{% capture overview %}} + +垃圾回收是 kubelet 的一个有用功能,它将清理未使用的镜像和容器。 + + + +Kubelet 将每分钟对容器执行一次垃圾回收,每五分钟对镜像执行一次垃圾回收。 + + + +不建议使用外部垃圾收集工具,因为这些工具可能会删除原本期望存在的容器进而破坏 kubelet 的行为。 + + + +{{% /capture %}} + + +{{% capture body %}} + +## 镜像回收 + + + +Kubernetes 借助于 cadvisor 通过 imageManager 来管理所有镜像的生命周期。 + + + +镜像垃圾回收策略只考虑两个因素:`HighThresholdPercent` 和 `LowThresholdPercent`。 + + + +磁盘使用率超过上限阈值(HighThresholdPercent)将触发垃圾回收。 + + + +垃圾回收将删除最近最少使用的镜像,直到磁盘使用率满足下限阈值(LowThresholdPercent)。 + + + +## 容器回收 + + + +容器垃圾回收策略考虑三个用户定义变量。 + + + +`MinAge` 是容器可以被执行垃圾回收的最小年龄。 + + + +`MaxPerPodContainer` 是每个 pod 内允许存在的死亡容器的最大数量。 + + + +`MaxContainers` 是全部死亡容器的最大数量。 + + + +可以分别独立地通过将 `MinAge` 设置为 0,以及将 `MaxPerPodContainer` 和 `MaxContainers` 设置为小于 0 来禁用这些变量。 + + + +Kubelet 将处理无法辨识的、已删除的以及超出前面提到的参数所设置范围的容器。最老的容器通常会先被移除。 + + + +`MaxPerPodContainer` 和 `MaxContainer` 在某些场景下可能会存在冲突,例如在保证每个 pod 内死亡容器的最大数量(`MaxPerPodContainer`)的条件下可能会超过允许存在的全部死亡容器的最大数量(`MaxContainer`)。 + + + +`MaxPerPodContainer` 在这种情况下会被进行调整:最坏的情况是将 `MaxPerPodContainer` 降级为 1,并驱逐最老的容器。 + + + +此外,pod 内已经被删除的容器一旦年龄超过 `MinAge` 就会被清理。 + + + +不被 kubelet 管理的容器不受容器垃圾回收的约束。 + + + +## 用户配置 + + + +用户可以使用以下 kubelet 参数调整相关阈值来优化镜像垃圾回收: + + + +1. `image-gc-high-threshold`,触发镜像垃圾回收的磁盘使用率百分比。默认值为 85%。 + + + +2. `image-gc-low-threshold`,镜像垃圾回收试图释放资源后达到的磁盘使用率百分比。默认值为 80%。 + + + +我们还允许用户通过以下 kubelet 参数自定义垃圾收集策略: + + + +1. `minimum-container-ttl-duration`,完成的容器在被垃圾回收之前的最小年龄,默认是 0 分钟,这意味着每个完成的容器都会被执行垃圾回收。 + + + +2. `maximum-dead-containers-per-container`,每个容器要保留的旧实例的最大数量。默认值为 1。 + + + +3. `maximum-dead-containers`,要全局保留的旧容器实例的最大数量。默认值是 -1,这意味着没有全局限制。 + + + +容器可能会在其效用过期之前被垃圾回收。这些容器可能包含日志和其他对故障诊断有用的数据。 + + + +强烈建议为 `maximum-dead-containers-per-container` 设置一个足够大的值,以便每个预期容器至少保留一个死亡容器。 + + + +由于同样的原因,`maximum-dead-containers` 也建议使用一个足够大的值。 + + + +查阅 [这个问题](https://github.com/kubernetes/kubernetes/issues/13287) 获取更多细节。 + + + +## 弃用 + + + +这篇文档中的一些 kubelet 垃圾收集(Garbage Collection)功能将在未来被 kubelet 驱逐回收(eviction)所替代。 + + + +包括: + +| 现存参数 | 新参数 | 解释 | +| ------------- | -------- | --------- | +| `--image-gc-high-threshold` | `--eviction-hard` 或 `--eviction-soft` | 现存的驱逐回收信号可以触发镜像垃圾回收 | +| `--image-gc-low-threshold` | `--eviction-minimum-reclaim` | 驱逐回收实现相同行为 | +| `--maximum-dead-containers` | | 一旦旧日志存储在容器上下文之外,就会被弃用 | +| `--maximum-dead-containers-per-container` | | 一旦旧日志存储在容器上下文之外,就会被弃用 | +| `--minimum-container-ttl-duration` | | 一旦旧日志存储在容器上下文之外,就会被弃用 | +| `--low-diskspace-threshold-mb` | `--eviction-hard` or `eviction-soft` | 驱逐回收将磁盘阈值泛化到其他资源 | +| `--outofdisk-transition-frequency` | `--eviction-pressure-transition-period` | 驱逐回收将磁盘压力转换到其他资源 | + + + +{{% /capture %}} + +{{% capture whatsnext %}} + +查阅 [配置驱逐回收资源的策略](/docs/tasks/administer-cluster/out-of-resource/) 获取更多细节。 + + + +{{% /capture %}}