如何限制 LXD 容器可以使用的资源

在之前的文章中,您可以探索 LXD 是什么以及如何开始使用它,以防您不熟悉该平台。

在大多数情况下,您将在同一系统上使用多个容器将较大的整体拆分为较小的组件。 限制每个组件可以使用的资源量是有意义的。 但为什么? 显然,原因的数量与您可以使用容器的场景一样无限。

LXD 容器的限制何时有用

  • 提供服务并给每个客户一个 LXD 实例。 为了 example,这可能是一个大型服务器,并且您将每个客户网站托管到一个单独的容器中。 如果网站突然出现流量激增,这可能会减慢其他实例的速度。 有限制,只有一个容器会减速,其余的会正常运行。
  • 在类似的情况下,您可以轻松销售不同的服务计划。 一个客户可以支付 X 数量的资源,另一个可以支付 Y 数量。 您可以通过一些简单的命令轻松调整它。
  • 您可以保护自己免受更简单形式的拒绝服务攻击。 当一个容器被轰炸时,它将达到其资源使用限制。 其他容器不会受到影响。
  • 您有两个容器,每个容器都将使用 100% 的可用 CPU 时间。 但是,您希望其中一个比另一个更快地完成工作。 为了 example,可能会为您明天需要的项目渲染视频。 您可以将 90% 的 CPU 时间分配给第一个,将 10% 的 CPU 时间分配给第二个。

当然,你可能有你自己的原因。 如果你在整个系统上只使用一个容器,你甚至可能不需要这个。 但是如果你使用多个容器,你几乎总是需要设置一些限制。 因为,一个 LXD 实例中的攻击、错误或其他形式的不当行为可能会影响整个系统并减慢它的速度。 您拥有的容器越多,发生这种情况的可能性就越大。

如何在 LXD 容器上设置资源限制

与磁盘操作相关的资源控制需要安装 ZFS。 如果您按照此处的教程进行操作,则它已经安装。 否则,请按照教程中的说明安装 ZFS 实用程序,然后重新运行以下命令。 当询问要使用哪个存储后端时选择 ZFS。

限制内存使用

在下面的命令中,将“container_name”替换为您的容器的实际名称。 设置内存限制就像输入一样简单:

如果您想使用千兆字节而不是兆字节,请键入“GB”而不是“MB”。

限制 CPU 使用率

如果要限制容器可以使用的 CPU 内核数,请键入:

要“固定”到特定的 CPU 内核,请使用:

这将使容器仅使用第一个 CPU。 要使用第二个,您需要输入 1-1。 要使用从第一个到第三个的所有 CPU 内核,请键入 0-3。

另一种类型的限制是容器可以使用多少 CPU 时间。

这只会让容器每 100 毫秒使用 10 毫秒的 CPU 时间,因此大约是一个 CPU 内核的 10%。

限制磁盘使用

要限制与磁盘相关的资源,您必须首先将根磁盘设备添加到您的容器中。 默认情况下它已经存在,继承自默认的 LXD 配置文件。 但是在你这样做之前,你不能在每个容器的基础上更改它的设置。

如果您以不同的方式命名您的池,请将“default”替换为您的存储池的名称。 如果您忘记了它的名称,可以使用以下命令显示它:

要限制 LXD 实例可以使用的磁盘空间:

不幸的是,I/O 限制(读/写“速度”和 IOPS) 暂时不工作.

限制网络使用

与磁盘一样,您首先必须添加一个可以配置的虚拟以太网设备。 找到将 LXD 实例连接到外部世界的网桥名称。

如有必要,替换“lxdbr0”(如果在您的情况下桥的名称不同)。 如果您没有将网络类型选择为桥接(默认答案),则在“lxd init”配置步骤中,您可能需要调整以下命令以反映您的选择。 为了 example,您可能还必须将“nictype”替换为您用于 LXD 网络的任何内容。

最后,设置网络入口(下载)和/或出口(上传)的限制。

1Mbit 是一兆位(不是兆字节)。 一个字节包含 8 位,这意味着这会将下载限制在每秒 1/8=0.125Mbits 左右,大约 120 KB。 因此,如果您希望它以 1MB/s(兆字节)的速度下载,请乘以 8,并将入口限制设置为 8Mbit。

对于出口,使用:

结论

这涵盖了与资源限制相关的最常用属性。 但是您可以设置更多变量 lxc config device setlxc config set. 你可以 在 LXD 的 GitHub 页面上阅读有关这些可调整容器属性的更多信息.

订阅我们的新闻!

我们最新的教程直接发送到您的收件箱

注册所有时事通讯。 注册即表示您同意我们的隐私政策并且欧洲用户同意数据传输政策。 我们不会共享您的数据,您可以随时取消订阅。 订阅