【问题标题】:Kubernetes: one pod, more containers on more nodesKubernetes:一个 Pod,更多节点上的更多容器
【发布时间】:2017-11-10 16:17:07
【问题描述】:

有人可以帮我为 Kubernetes 创建一个 yaml 配置文件,以便面对这样的情况:一个 pod 有 3 个容器(例如),这些容器必须部署在集群的 3 个节点上(Google GCE) .

|P|      |Cont1| ----> |Node1|
|O| ---> |Cont2| ----> |Node2| <----> GCE cluster
|D|      |Cont3| ----> |Node3|

谢谢

【问题讨论】:

  • kubernetes.io/docs/concepts/workloads/pods/pod-overview 正如他们在此处的文档中所说:Pod 中的容器会自动在集群中的同一物理或虚拟机上共同定位和共同调度。这意味着一个 pod 的容器总是在同一个节点上。如果要水平扩展,可以将容器放入单独的 pod 中。
  • 我无法在更多集群节点上部署一些容器似乎很奇怪,考虑到这样我无法利用集群的弹性和 kubernetes 实用程序轻松扩展 Web 服务器电池以在一个中进行一些操作射击...
  • 嗯,一般来说,组件不需要等量缩放。您的数据库可以处理一定的负载,但您的网页本身可能需要扩展更多才能处理相同数量的用户。在这种情况下,让它们能够单独扩展是非常有益的。如果将它们放在同一个 pod 中,它们总是必须以完全相同的程度水平扩展。为什么要将它们捆绑在一起?
  • 实际上的想法是为 db 提供一个 pod,为 Web 服务器提供一个不同的 pod。但我正在考虑以这种方式进行开发,因为我确信我可以使用集群将所有 Web 服务器作为单一服务进行管理。另一方面,如果一个带有多个容器的 pod 只能部署在一个节点上,那么拥有节点集群的意义是什么?考虑到集群节点具有相同的硬件特性,在同一个节点中拥有多个容器意味着权衡一个和留下另一个出院。现在我真的不明白拥有集群+kubernetes 的用处......
  • 好吧,假设您的节点有 2 个 Pod 运行您的 Web 服务。您的集群将平衡两台服务器之间的负载,现在您可以处理更多流量。较小的节点通常也比拥有一个大型单体更便宜。此外,如果您正在运行两台网络服务器并且其中一台崩溃,您仍然可以从备份中提供流量。 Kubernetes 也会重启出现故障的服务。您应该研究可用性和水平可扩展性等术语。它还可以让您更有效地使用硬件。如果您有两个小型服务,它们可以放在一个节点上,您可以节省成本。

标签: kubernetes cluster-computing google-compute-engine


【解决方案1】:

来自Kuberenets Concepts

Kubernetes 集群中的 Pod 可以通过两种主要方式使用:Pod 运行单个容器。 “one-container-per-Pod”模型是最 常见的 Kubernetes 用例;在这种情况下,您可以将 Pod 视为 包装单个容器,Kubernetes 管理 Pod 而不是直接的容器。 运行多个容器的 Pod 需要一起工作。 Pod 可能会封装应用程序 由紧密耦合的多个位于同一位置的容器组成 并且需要共享资源。这些位于同一地点的容器可能会形成一个 单一内聚服务单元——一个容器从一个 向公众共享卷,而单独的“sidecar”容器 刷新或更新这些文件。 Pod 包裹着这些容器并 存储资源作为一个单一的可管理实体。

简而言之,最有可能的是,您应该将每个容器放在一个 Pod 中,以真正受益于微服务架构与通常部署在 VM 中的单体架构。但是,在某些情况下,您需要考虑将容器放在一起。也就是说,正如article (Patterns for Composite Containers) 中所述,一些复合容器应用程序是:

  • 边车容器

扩展和增强“主”容器

  • 大使容器

代理本地连接到世界

  • 适配器容器

标准化和标准化输出

一旦您定义并运行 Deployment,调度程序将负责为您的 Pod 选择最合适的位置,除非您 manually assign Nodes 在 Deployment 的 YAML 中定义标签(不推荐,除非您知道自己在做什么)。

【讨论】:

    【解决方案2】:

    您可以将多个容器分配给单个 pod。您可以将 pod 分配给特定的节点池。但我不确定是否可以将多个容器分配给在单个 pod 中运行的多个节点。

    您可以在此处将每个容器分配给不同的 pod(3 个容器 --> 3 个 pod),然后通过将此代码添加到部署的 .yaml 文件中,将每个 pod 分配给不同的节点池。

    nodeSelector:
       nodeclass: pool1
    

    【讨论】:

      猜你喜欢
      • 2020-02-10
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2022-12-20
      • 2020-09-14
      相关资源
      最近更新 更多