如何在Kubernetes豆荚内“水平”组织容器?

所以我试图把我的头围绕着一个典型的Kubernetes吊舱的样子。 根据他们的文件 ,一个吊舱

一个荚(就像一群鲸鱼或者豌豆荚一样)对应着一组共同的上下文运行的应用程序。

后来在同一篇文章中:

Pod可以用来托pipe垂直集成的应用程序栈,但是他们的主要动机是支持共同定位…

好的,您可以将整个垂直堆栈(从数据库到Web应用程序)组织为单个窗格。 但显然这不是典型的组织方式,所以我认为通常一个“ 横向 ”组织是首选( 为什么? )。

但是对于我来说,横向分层/分层意味着你只能在一个容器中有一个容器,因为通常在每个服务层(web,app,cache,db等)中都有一个types的组件。

我们举一个具体的例子。 假设我们有以下的垂直堆叠:

  • Web前端容器; Grails或者Spring MVC的web / app服务器
  • 微服务容器; 核心业务逻辑所在的RESTful Web服务
  • 消息代理(比如说RabbitMQ)容器
  • 微服务caching(一些服务已经分布在他们和他们的DB /后备存储之间的Hazelcastcaching集群)容器
  • MySQL数据库集群容器
  • MongoDB集群容器
  • 第三方REST风云API(比如SalesForce或Stripe或类似的)

这些是应用程序堆栈中相当典型的组件。 如果我们违背了Kubernetes自己的build议,并创build了“垂直alignment”的豆荚,那么每个豆荚将由每种层(Web /应用服务器,每个微服务,每个DB等)的一种容器组成。

但是,如何组织一个水平排列的吊舱? 什么容器将在哪个豆荚?

Pod是Kubernetes的基本调度单元。 通常情况下,一个吊舱只能在其中运行一个容器,因为大多数容器可以独立调度(即不需要共同位于同一台机器上)。

关于您的示例,可以将大多数容器放在单独的容器中,并使用复制控制器根据需要水平缩放每个容器(因此容器)的副本数量。 与您的复制控制器一起,您还需要服务在副本之间进行负载平衡。 可以使用pod /复制控制器/服务上的标签来组织垂直层,例如tier=message_broker

编辑:

将整个堆栈放在一个容器中不是一个好主意的原因是它限制了您的灵活性:

  • 它会迫使你的整个堆栈安排在一台机器上,如果机器缺less一些必要的资源,这可能会使安排更加困难。
  • 单个组件不能单独进行缩放(例如,如果您需要更多的前端副本来处理stream量,但是您的数据库仅用于less量查询)
  • 所有的容器都需要同意使用哪个端口。 每个吊舱都有一个唯一的IP,因此运行在独立吊舱中的容器可以使用相同的端口。