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

Can a deployment resource have multiple containers?

我正在尝试在 k8s 中部署多个 pods,例如 MySQL、Mango、Redis 等

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

谢谢 帕文

一个部署中可以有多个容器。

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

为了扩展目的拆分部署仍然是最佳做法,您的前端可能需要比后端扩展更多,具体取决于缓存,您可能不希望 pods 太大。对于像 redis 这样的缓存目的,最好在旁边有一个集群,因为每次 pod 启动或停止时,您都会丢失数据。

每个 Pod 有多个容器以在它们之间共享命名空间和卷是很常见的:以大使模式为例,该模式用于向外部展示应用程序添加一个身份验证层,使其对用户完全透明主应用程序。

使用 sidecar 模式的其他示例包括日志解析器或配置器,它们可以热重载凭据而无需主应用程序操心。

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

I am trying to deploy multiple pods in k8s like say MySQL, Mango, Redis etc

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

Can i create a single deployment resource for this and have multiple containers defined in template section? Is this allowed? If so, how will replication behave in this case?

不,在 Kubernetes 中是不允许的。至于 Deployments and StatefulSets,(您需要有状态的应用程序,例如数据库)两者都管理基于相同容器规范的 Pods,因此不可能有 DeploymentStatefulSet 由不同类型的 Pods 组成,基于不同的规格。

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