Kubernetes:增加 K3s 中 OverlayFS / containerd 运行时卷的大小
Kubernetes: Increase the size of OverlayFS / containerd runtime volumes in K3s
我有一个使用 Rancher 的 K3s 部署的轻量级 Kubernetes 集群。
大部分时间 pods 在其中运行良好,但我注意到它有时会遇到 NodeDiskPressure,这会导致现有的 Pods被驱逐。
查看主机中的可用磁盘,我发现在此问题之前较高的集群负载与 containerd 运行时存储中的大量使用相吻合。在正常情况下,这些卷的使用量 space 为 70%,但它们会上升到 +90%,这可能会导致 pod 逐出。
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/3cd5b4cad915d0914436df95359e7685aa89fcd3f95f0b51e9a3d7db6f11d01b/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/fd2a513ce2736f10e98a203939aaa60bd28fbbb4f9ddbbd64a0aedbf75cae216/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/73865fcfa8b448d71b9b7c8297192b16612bd01732e3aa56d6e6a3936305b4a2/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/fc68e6653cec69361823068b3afa2ac51ecd6caf791bf4ae9a65305ec8126f37/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/7fcd3e8789f0ca7c8cabdc7522722697f76456607cbd0e179dd4826393c177ec/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/9334ed12649bcdb1d70f4b2e64c80168bdc86c897ddf699853daf9229516f5cf/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/de1c6f47cf82ff3362f0fc3ed4d4b7f5326a490d177513c76641e8f1a7e5eb1a/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/079c26817021c301cb516dab2ddcf31f4e224431d6555847eb76256369510482/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/d0da2f62430306d25565072edf478ad92752255a40830544101aeb576b862a5f/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/6965b5a7e133c6d96be6764356b2ee427a9d895e09358098f5c9a5fde97e2144/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/2180b0c76ca7c8666acfd5338754a1c4a063a65e1d2e804af997b36bab1771e7/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/88caedc991159c3509da8c2a43619c0e904f9c1e17f36b5c5afd5268ef2e00b4/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/0a76f599cda9501d36dd4a2fe3526a85b6360f1132cff109906a8b2f5ce9b9b0/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/6005d872441aa87e64857b6b07ca03e2b0962b6f130a047a179f31d28afe4794/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/e1a76ec6ffc3eb2a2557e6269ec59155eb8cfbd941b6e206b9017d3775322a68/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/c72b1307d12ec39676eadb37b8c72b130f335f10eeceab92504892f80696a1ad/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/ae4c5f3100f44ceae63da2afc6e72603baf2e08730e47e50ff3a78f7617e57cf/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/02672bd47cce3163cc31a9ac7fe524fc11d3736b90c2c3f6eb01572837574dd5/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/1c41e3c57a500a00e2cd1c399e386d05d0269588155f8a276a63febe697e855b/rootfs
尝试增加主机上的可用 RAM,显然没有效果。
从上面的输出中可以看出,overlay 的总容量当前设置为 6 GB。我查看了 K3s 和 containerd 的 文档以
尝试找出如何增加覆盖文件系统的大小,
但很遗憾找不到任何东西。
起初我认为用更大的 space 重新安装它会有所帮助
解决这个问题,但我不确定我应该使用哪个 lower/upper 目录来设置覆盖。
也许手动清理目录可以解决问题?我注意到 /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/ 中的一些文件夹已经有几天了。看看它们的内部,似乎它们存储了 Docker 个图像层,但也存储了 Pod 状态?仍然不确定删除这些是否会破坏任何东西,所以现在我保留了它们。
有什么提示吗?
经过一些研究,发现了一些帮助我解决这个问题的事情:
K3s 使用 containerd 作为容器运行时。它带有 crictl - 它提供了一些 containerd 功能。以下命令清除存储在缓存中的未使用图像(在 /var 中,至少对于 K3s 的普通安装):
crictl rmi --prune
也可以更改 k3s.service 参数,以便您创建消耗 space 的阈值,这将触发垃圾收集。您只需要在k3s server
之后添加以下参数即可,例如:
--kubelet-arg=image-gc-high-threshold=85 --kubelet-arg=image-gc-low-threshold=80
- 增加 /var 的大小也是一种选择。在这方面,可以在现有卷组中释放 space,或者添加一个新磁盘并将其添加到 /var 的卷组中 - 更多内容在 link.
中
我有一个使用 Rancher 的 K3s 部署的轻量级 Kubernetes 集群。
大部分时间 pods 在其中运行良好,但我注意到它有时会遇到 NodeDiskPressure,这会导致现有的 Pods被驱逐。
查看主机中的可用磁盘,我发现在此问题之前较高的集群负载与 containerd 运行时存储中的大量使用相吻合。在正常情况下,这些卷的使用量 space 为 70%,但它们会上升到 +90%,这可能会导致 pod 逐出。
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/3cd5b4cad915d0914436df95359e7685aa89fcd3f95f0b51e9a3d7db6f11d01b/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/fd2a513ce2736f10e98a203939aaa60bd28fbbb4f9ddbbd64a0aedbf75cae216/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/73865fcfa8b448d71b9b7c8297192b16612bd01732e3aa56d6e6a3936305b4a2/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/fc68e6653cec69361823068b3afa2ac51ecd6caf791bf4ae9a65305ec8126f37/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/7fcd3e8789f0ca7c8cabdc7522722697f76456607cbd0e179dd4826393c177ec/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/9334ed12649bcdb1d70f4b2e64c80168bdc86c897ddf699853daf9229516f5cf/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/de1c6f47cf82ff3362f0fc3ed4d4b7f5326a490d177513c76641e8f1a7e5eb1a/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/079c26817021c301cb516dab2ddcf31f4e224431d6555847eb76256369510482/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/d0da2f62430306d25565072edf478ad92752255a40830544101aeb576b862a5f/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/6965b5a7e133c6d96be6764356b2ee427a9d895e09358098f5c9a5fde97e2144/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/2180b0c76ca7c8666acfd5338754a1c4a063a65e1d2e804af997b36bab1771e7/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/88caedc991159c3509da8c2a43619c0e904f9c1e17f36b5c5afd5268ef2e00b4/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/0a76f599cda9501d36dd4a2fe3526a85b6360f1132cff109906a8b2f5ce9b9b0/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/6005d872441aa87e64857b6b07ca03e2b0962b6f130a047a179f31d28afe4794/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/e1a76ec6ffc3eb2a2557e6269ec59155eb8cfbd941b6e206b9017d3775322a68/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/c72b1307d12ec39676eadb37b8c72b130f335f10eeceab92504892f80696a1ad/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/ae4c5f3100f44ceae63da2afc6e72603baf2e08730e47e50ff3a78f7617e57cf/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/02672bd47cce3163cc31a9ac7fe524fc11d3736b90c2c3f6eb01572837574dd5/rootfs
overlay 6281216 4375116 1906100 70% /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/1c41e3c57a500a00e2cd1c399e386d05d0269588155f8a276a63febe697e855b/rootfs
尝试增加主机上的可用 RAM,显然没有效果。
从上面的输出中可以看出,overlay 的总容量当前设置为 6 GB。我查看了 K3s 和 containerd 的 文档以 尝试找出如何增加覆盖文件系统的大小, 但很遗憾找不到任何东西。
起初我认为用更大的 space 重新安装它会有所帮助 解决这个问题,但我不确定我应该使用哪个 lower/upper 目录来设置覆盖。
也许手动清理目录可以解决问题?我注意到 /run/k3s/containerd/io.containerd.runtime.v2.task/k8s.io/ 中的一些文件夹已经有几天了。看看它们的内部,似乎它们存储了 Docker 个图像层,但也存储了 Pod 状态?仍然不确定删除这些是否会破坏任何东西,所以现在我保留了它们。
有什么提示吗?
经过一些研究,发现了一些帮助我解决这个问题的事情:
K3s 使用 containerd 作为容器运行时。它带有 crictl - 它提供了一些 containerd 功能。以下命令清除存储在缓存中的未使用图像(在 /var 中,至少对于 K3s 的普通安装):
crictl rmi --prune
也可以更改 k3s.service 参数,以便您创建消耗 space 的阈值,这将触发垃圾收集。您只需要在
k3s server
之后添加以下参数即可,例如:
--kubelet-arg=image-gc-high-threshold=85 --kubelet-arg=image-gc-low-threshold=80
- 增加 /var 的大小也是一种选择。在这方面,可以在现有卷组中释放 space,或者添加一个新磁盘并将其添加到 /var 的卷组中 - 更多内容在 link. 中