何时应该使用Kubernetes复制控制器创build多个Docker容器图像实例?

当使用Kubernetes来pipe理你的Docker容器,特别是在使用复制控制器的时候,你应该什么时候增加一个运行容器实例的映像到1以上? 我知道Kubernetes可以根据需要在复制控制器configuration文件中产生尽可能多的容器副本,但是为什么只要增加计算虚拟机大小就可以产生多个正在运行的容器(对于相同的映像)。 我认为,当你需要更多的计算能力时,继续增加机器的CPU / RAM,然后只有当你达到允许的最大可用计算能力时,目前在Google上有32个核心,那么你需要产生多个容器。

然而,似乎产生多个容器而不pipe虚拟机大小如何将certificate更高的可用性服务,但即使在1个容器复制控制器环境中,Kubernetes也将重新生成容器失败。 所以我不能弄清楚,出于什么原因,我想超过1运行容器(对于相同的图像)的原因,而不是用完虚拟机实例计算大小?

我想你已经解决了这个问题。 您所描述的两种缩放称为“垂直缩放”(增加单个实例的内存或CPU)和“水平缩放”(增加实例的数量)。

可用性:正如您所观察到的,即使使用单个容器,由于自动重新启动(在节点级别或复制控制器级别),您也可以实现相当好的可用性。 但它永远不可能是100%,因为在同一台机器上或者在一台新机器上(如果机器出现故障),你总会有重新启动进程的宕机时间。 相比之下,水平扩展(运行容器的多个副本)允许从最终用户的angular度有效地实现“零停机时间”,假设在副本之间存在某种负载平衡或故障转移机制,并且您的应用程序被写入方式允许复制。

关于可伸缩性:这是高度依赖于应用程序的。 例如,对于单线程应用程序垂直扩展CPU不会增加它可以处理的工作负载,但在负载均衡器(水平缩放)后面运行它的多个副本将会。 另一方面,有些应用程序不是以允许复制的方式编写的,因此对于那些垂直缩放是唯一的select。 许多应用程序(特别是“云原生”应用程序)适合水平和垂直缩放,但细节取决于应用程序。 请注意,一旦您需要扩展单个节点可以处理的工作负载(由于CPU或内存),您只能复制(水平缩放)。

所以你的问题的简短答案是人们复制的可用性和可扩展性。

有多种原因会导致您为什么会扩大或缩小应用程序。

Kubernetes项目正在寻求在将来提供自动扩展function,以dynamic地调整和缩小复制控制器的大小(可能为0)以响应观察到的stream量。 有关自动缩放的一个很好的讨论,请参阅以下文章:

https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/proposals/autoscaling.md