虚拟化或不虚拟化裸机服务器以进行kubernetes部署

时间:2017-01-02 07:47:28

标签: virtual-machine kubernetes virtualization cloud-bare-metal

我想在一个大型物理服务器(24核)上部署kubernetes,而且我不确定一些事情。

除了在裸机上运行之外,为k8s群集创建虚拟机的优缺点是什么。

我有以下注意事项:

  • 创建vms将允许工作负载隔离。可以创建新的实验vms并将其分配给开发人员。
  • 另一方面,k8s在裸机上运行,​​可以为每个开发人员创建一个新的NAMESPACE进行实验,他们可以在其中运行代码。毕竟他们的代码应该在docker容器中运行。

安全

  • 拥有vms会限制给予未来维护者的访问量,从而限制可能造成的损害程度。另一方面,任何未来维护者的主要任务是添加/删除节点,他们需要裸机访问才能这样做。

认证

  • 目前,开发人员只有在代码通过CI管道运行并且部署了正在运行的部署时才会触及服务器。但是查看日志怎么样?我们可以设置分层kubectl身份验证,以允许开发人员只访问分配给他们的任何命名空间(我相信这应该可以使用k8s命名空间授权插件)。

服务器上已存在许多虚拟机。这会是一个问题吗?

3 个答案:

答案 0 :(得分:1)

128个内核和疑点....这是单个服务器的很多内核。

对于kubernetes但是这不相关: Kubernetes可以使用不同大小的服务器并最大限度地利用它们。但是,如果在单个服务器上组合主服务器进程和节点/工作进程,则可能会产生不需要的资源问题。正如您已经提到的,您可以管理具有命名空间的那些。

我们所做的是在单个dev / qa kubernetes环境中使用与命名空间的持续集成,其中更改具有自己的命名空间(因此我们运行许多命名空间)并在这些命名空间中运行完整的环境部署。一堆shell脚本用于管理它。这适用于您拥有的大型服务器,以及较小(或虚拟)的盒子。虚拟化对你的好处主要在于将大盒子拆分成较小的盒子,这样你就可以将它用于其他目的,然后只使用kubernetes(是的,除了MS Windows之外,kubernetes运行,没有台式机,没有用于VPN目的的内核模块等等) )。

答案 1 :(得分:1)

我会以不同的vms的形式分开dev和prod。我曾经在docker中有一个webapp,它使用了太多的线程,因此主机上的docker守护进程崩溃了。幸运的是它仅限于一位主持人。您可以通过设置限制来保护这一点,但这是一个风险:开发中的一个错误也可能导致产品下降。

答案 2 :(得分:0)

我认为答案是“这取决于!”这不是一个真正的答案。就个人而言,我会使用VM拆分机器并以此方式部署。您可以更灵活地了解自己创建的服务器资源量,并轻松创建新环境,然后轻松销毁。

即使这些vms非常庞大,我认为如果你在机器上有现有的vm,它仍然更容易管理。

也就是说,没有技术上的原因导致您无法运行单个节点服务器,但是您可能会遇到升级停机问题(如果这是一个问题),以及该服务器是否需要修补或重新启动,然后整个群集都关闭了。

我会考虑您的环境对HA和正常运行时间的需求,以及您将如何部署VM(如果您走这条路线),并确定哪种方式最适合您。