对同一pod中的不同容器运行不同的副本计数



我有一个pod,其中包含两个紧密相关的服务,它们作为容器运行。我以StatefulSet的身份运行,并已将副本设置为5。因此,创建了5个吊舱,每个吊舱都有两个容器。

现在我的要求是让第二个容器只在一个pod中运行。我不希望它在5个吊舱中运行。但我的第一次服务应该仍然在5个吊舱中运行。

有没有办法在Kubernetes的部署yaml文件中定义这一点?请帮忙。

a"吊舱";是由kubernetes管理的最小实体,一个pod可以包含多个容器,但每个deployment/statefulset只能指定一个pod,因此无法仅用一个deployment/statefulset实现您所要求的功能。

但是,如果您希望能够相互独立地扩展它们,则可以创建两个部署/statefulsets来实现这一点。这是唯一的方法。

参见https://kubernetes.io/docs/concepts/workloads/pods/了解更多信息。

容器类似于过程,

吊舱类似于虚拟机、

Statefulsets/Deployments类似于控制VM水平扩展的主管程序。

对于您的场景,唯一的方法是在新部署的pod模板中定义第二个容器,并将其副本设置为1,同时使用5个副本保持旧的状态集。

以下是文档中的一些定义(参考文献中的链接(:

Containers是一种允许您将应用程序与其整个运行时环境打包和隔离的技术,这些环境包括运行所需的所有文件。这使得在保留完整功能的同时,可以轻松地在环境(开发、测试、生产等(之间移动所包含的应用程序。[1]

Pods是Kubernetes中最小、最基本的可部署对象。Pod表示集群中正在运行的进程的单个实例。吊舱包含一个或多个容器。当一个Pod运行多个容器时,这些容器作为一个实体进行管理,并共享Pod的资源。[2]

部署为Pod和ReplicaSets提供声明性更新。[3]

StatefulSet是用于管理有状态应用程序的工作负载API对象。管理一组Pod的部署和扩展,并保证这些Pod的顺序和唯一性。[4]


基于所有这些信息,使用一个部署/Statefulset不可能满足您的需求。

我建议你尝试一下@David Maze在你的问题下的评论中提到的想法:

如果有可能有4个主应用程序容器没有匹配的相同pod支持容器,那么它们就不是这样";密切相关的";他们需要在同一个吊舱里运行。在单独的Deployment/StatefulSet中运行第二个容器(也使用单独的Service(,您可以独立控制副本计数。


参考文献:

  1. 关于容器的文档
  2. 关于Pods的文档
  3. 有关部署的文档
  4. 关于StatefulSet的文档

最新更新