部署资源可以有多个容器吗?

时间:2019-09-06 13:20:58

标签: kubernetes kubectl

我正在尝试在k8中部署多个Pod,例如MySQL,Mango,Redis等

我可以为此创建一个部署资源,并在模板部分定义多个容器吗?可以吗?如果是这样,在这种情况下复制将如何表现?

谢谢 帕万

3 个答案:

答案 0 :(得分:1)

  

我正在尝试在k8中部署多个Pod,例如MySQL,Mango,   Redis等

微服务架构的角度来看,将所有这些容器放在一个 Pod 中实际上是一个坏主意。请记住,Pod是可以由 Kubernetes 创建和管理的最小的可部署单元。有很多很好的原因,您不想将所有上述服务都放在一个 Pod 中。扩展此类解决方案的困难只是其中之一。

  

我可以为此创建一个部署资源吗?   模板部分中定义的容器?可以吗?如果是这样,如何   复制将在这种情况下起作用吗?

否,在Kubernetes中是不允许的。对于DeploymentsStatefulSets(对于全状态应用程序,例如数据库,您需要它们)都管理基于相同容器规范的Pod,因此无法进行部署 StatefulSet ,由基于不同规格的不同类型的Pod组成。

总结一下: 为不同目的提供服务的许多Deployment和StatefulSets对象是正确的解决方案。

答案 1 :(得分:0)

部署中可以包含多个容器。

通常,它通常有一个用于应用程序的主容器和一些应用程序所需的小车容器。我现在没有示例。

仍然最好的做法是出于缩放目的而拆分部署,根据缓存的不同,您的前端可能需要比后端更扩展,并且您可能不希望Pod太大。对于像redis这样的处理目的,最好在每次pod启动或停止时都在侧面有一个集群,这样会丢失数据。

答案 2 :(得分:0)

每个Pod通常具有多个容器以便在它们之间共享名称空间和卷:以Ambassador模式为例,该模式用于向外部展示应用程序,并添加一个用于身份验证的层,从而使其对主应用程序完全透明

其他使用sidecar模式的示例由日志解析器或配置器组成,这些解析器或配置器可以在不使主应用程序担心的情况下热重装凭据。

这是理论,根据您的需要,每个组件必须使用一个部署,因此对于您的应用程序来说是一个Deployment,对于数据库来说是一个StatefulSet,等等。请记住,每个进程使用一个容器,每个支持服务使用一个Kubernetes资源。