用例:我们有几个网络服务器,我们将在短期内使用 2 个应用程序服务器组件使其过载。
从长远来看,我们会将应用程序服务器组件从网络服务器迁移到专用硬件上(随着使用量的增长和我们获得更多硬件)。
我们正在考虑使用 KVM 创建单独的客户操作系统,以便我们可以单独开发(测试)单独的应用程序,当需要迁移它们时,这个过程要简单得多,因为我们正在移动完整的 VM。这也将确保我们拥有一致的操作系统配置,因为管理标准 VM 映像比管理原始磁盘映像更容易。
第二个好处是能够启动 VM 以升级生产硬件上的服务器组件,而无需第二套硬件(而预算限制了我们的硬件支出)。
问题是这样的:
- 我们希望所有 CPU 资源在网络服务器和应用程序服务器组件之间 100% 共享。这意味着我会将所有 8 个内核分配给所有 VM。这样可以吗,或者有人在这个推理中看到任何危险信号吗?
为此,我会使用Linux 容器 (LXC)而不是完整的管理程序(KVM、ESXi 等)。
这里的例子。
这使您可以访问物理资源、网络和操作系统隔离,但没有 KVM 的开销和管理复杂性。“操作系统”驻留在普通的文件系统目录树中(增强的chroot)。
请指定您使用的 Linux 操作系统发行版。
是的,您可以过度分配 vCPU。它是否会导致问题几乎完全取决于工作量。如果 VM 同时需要比 pCPU 数量更多的线程,那么计时开销可能会发挥作用。无论如何,这是您要密切关注的事情。
如果您计划一起对 VM 进行压力测试,那么您会看到性能下降。如果您只计划对一个 VM 施加压力,而其他 VM 处于空闲状态,则性能差异不会那么大。
这些虚拟机真的需要 8 个内核吗?如果没有,我会坚持他们需要的东西。一个 KVM 虚拟 CPU,在主机看来就像一个进程,而主机无论如何都可以将它调度到任何物理 CPU 上(除非你将它固定到一个特定的 CPU 上)。不必要的过度分配没什么大不了的,但避免它会减少主机需要能够调度的进程数量,并使 Linux 调度程序的工作更轻松
这正是您的操作系统的用途。您不能像您建议的那样过度配置 CPU 资源。如果你真的想要隔离,但有共享资源,你会想要 Docker(容器),因为它们正是:操作系统级虚拟化。