io和cpu密集型服务器应该在kubernetes集群中分离吗?

我们正在为我们的Web服务devise一个新的集群体系结构,并计划将Ceph对象存储和kubernetes用于我们的服务。 优化我们的服务器我们有不同的select:

  1. 使用相同的服务器,在所有服务器上运行Ceph和我们的服务,并使用kubernetes进行pipe理

  2. 像上面使用相同的服务器,但标签其中一些Ceph,不要运行服务

  3. 使用两种types的服务器:一种针对io进行了优化,另一种针对CPU进行了优化。 然后在io上运行Ceph,在cpu上运行Ceph。 并用kubernetes来pipe理他们

  4. 像上面有两个分离的服务器,但是不要使用kubernetes来处理io,让ceph处理所有的事情(是不是更简单,不要使用kubernetes来处理我们的Ceph集群?)

我知道相同的服务器具有更好的扩展性。 另一方面有两种types的服务器让我们来优化它们中的每一个。 什么是最好的解决scheme?

有些事情要考虑:

如果您正在使用旋转磁盘,那么您可能需要单独使用Ceph磁盘和随机Kubernetes任务。 这样,从kubernetes任务的随机I / O不会破坏Ceph访问的顺序(特别是写入和大量读取)。 显然,你可以用(2),(3)或(4)来完成。 但是,如果您的服务器(JBOD)中有多个磁盘,并且将每个磁盘分配给Ceph或Kubernetes,但不能同时分配(或者对于Kubernetes使用单独的引导闪存驱动器等) ..)

如果你的CPU优化服务器碰巧带有一个大的启动盘,那么你最终可能会觉得存储系统被搁置了,因为服务作业并没有全部使用,后来也希望你也可以在这些节点上运行Ceph,那个存储。 但是,如果它是一个小磁盘/ SSD,那么你可能不在乎。

您需要多less台服务器会有一些不确定性。 (如增长,失败,不精确的负荷估计)。 由于这种不确定性,你必须过度购买。 2 SKU,而不是1 SKU的超购情况。 随着需求的变化,以后重新调整服务器的难度会更大。 这种好处(1)或(2)。

从安全angular度来看,如果服务作业与存储不在同一台机器上,您可能会感觉更舒适。 如果您有不同程度上信任的各种不同的服务工作,这一点更为重要。

我不确定要对服务器SKU进行什么样的“优化”。 select完全适合一个吊舱的SKU不是一个好的做法。 你应该有更小的豆荚,并相信调度程序来装箱。

你应该在Kubernetes运行Ceph吗?

如果您正在寻找使用Ceph 为您的容器提供PV,您应该在Kubernetes之外运行。

如果你正在使用DaemonSet和StatefulSet来运行Ceph,你应该考虑这个 。 有一些build议来决定这是否适合您的组织。

你应该购买什么types的SKU?

如果您的首要任务是优化您的Ceph部署以获得最大的吞吐量,您将需要一个或多个Ceph日志的SSD和多个SSD / HDD来存储块。 您不希望与其他工作负载共享这些设备。 如果您使用Kubernetes在此configuration中pipe理Ceph,并且将所有其他工作负载静态分区到其他服务器,则使用Kubernetes几乎没有任何好处。

如果您正在针对最高成本/密度进行优化,则正确的select取决于工作负载的组合。 如果Ceph是唯一的存储工作负载,那么您仍然可以通过在单独的空间中运行存储密度优化的SKU来节省资金。