如何为每个 docker 容器创建一个共享但大小受限的 /tmp 目录而不使用 tmpfs

如何为每个 docker 容器创建一个共享但大小受限的 /tmp 目录而不使用 tmpfs

我在给定主机上运行了大约 50 个 mariadb docker 容器。由于应用程序的不可控性,我们有时会收到查询,导致 mariadb 向 tmp 目录写入最多 10GB 的数据(正常)或超过 10GB(不正常,应停止)。我无法在应用程序中修复此问题。相反,我需要确保如果向 tmp 写入超过 10GB 的数据,它会导致 mysql 收到“磁盘空间不足错误”。

我正在使用 overlay2 - 因此如果我不为 /tmp 安装卷,那么 /tmp 就是容器的一部分,写入效率低下,更糟糕的是,它将填满 overlay2 分区并导致所有容器失败。这不是一个好的解决方案。

我可以创建一个 50GB 的分区并将其绑定到所有容器中 - 这样更好。但这仍然意味着如果一个容器填满了 /tmp 目录,则所有容器都没有任何 /tmp 目录空间可以写入。

我可以将每个 /tmp 目录设为 tmpfs。但我至少需要 10GB,而没有那么多的 RAM 可用。

我可以为每个容器创建一个单独的 10GB 分区,但那是 500GB,我没有那么多的磁盘空间,所以没有多余的。

理想情况下,我希望创建一个在所有容器之间共享的 50GB 分区,但每个容器只允许向其中写入 10GB(这样,需要 5 个容器超出其限制才会影响整个服务器)。

但是,我不确定该怎么做。所有容器都以同一用户身份运行,因此配额没什么用。

或者也许还有其他我没有想到的方法?

相关内容