如何在Kubernetes pods内"水平"组织容器?

sme*_*eeb 3 architecture docker kubernetes

所以我试图围绕一个典型的Kubernetes pod看起来像什么.根据他们的文档,一个pod:

" 一个pod(如在一群鲸鱼或豌豆荚中)对应于一个以共享上下文运行的共同应用程序组. "

后来在同一篇文章中:

" Pod可用于托管垂直集成的应用程序堆栈,但它们的主要动机是支持共存...... "

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

但对我来说,水平分层/分层意味着你在一个pod中只有一个容器,因为通常在每个服务层(web,app,cache,db等)中你都有一种类型的组件.

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

  • Web前端容器; Grails或Spring MVC web/app服务器
  • 微服务容器; RESTful Web服务,其中包含核心业务逻辑
  • 消息代理(比如RabbitMQ)容器
  • 微服务缓存(一些服务已经分布了位于它们之间的Hazelcast缓存集群及其DB /后备存储)容器
  • MySQL数据库集群容器
  • MongoDB集群容器
  • 第三方RESTful云API(比如SalesForce或Stripe或类似的东西)

这些是应用程序堆栈中相当典型的组件.如果我们反对Kubernetes自己的建议,并创建"垂直对齐"的pod,每个pod将由每层的一种类型的容器(web/app服务器,每个微服务,每个DB等)组成.

但是如何组织水平对齐的吊舱呢?什么容器会进入哪个容器?

Tim*_*air 7

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

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

编辑:

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

  • 它会强制您在整个计算机上安排整个堆栈,如果计算机缺少某些必要的资源,这可能会使调度更加困难.
  • 单个组件无法独立扩展(例如,如果您需要更多前端副本来处理流量,但您的数据库仅用于少量查询)
  • 所有容器都需要就要使用的端口达成一致.每个pod都有一个唯一的IP,因此在不同的pod中运行的容器可以使用相同的端口.