我遇到了与以下相同的问题: 一个 Kubernetes pod 中的双 nginx
在我的 KubernetesDeployment模板中,我有 2 个容器使用相同的 80 端口。我知道 aPod中的容器实际上位于相同的网络命名空间下,这使得可以访问Podwithlocalhost或127.0.0.1。这意味着容器不能使用相同的端口。
借助docker runor很容易实现这一点docker-compose,通过8001:80用于第一个容器和8002:80第二个容器。
在 Kubernetes Pod 中是否有类似或更好的解决方案来做到这一点?无需将这 2 个容器分成不同的 Pod。
基本上,我完全同意@大卫和@帕特里克的评论,但我决定给它添加一些更多的东西它扩展到一个答案。
我遇到了与以下相同的问题:一个 Kubernetes pod 中的双 nginx
在提到的线程中已经有一个很好的解决这个问题的答案。从技术角度来看,它为您的特定用例提供了现成的解决方案,但它并不质疑想法本身。
在 docker run 或 docker-compose 的帮助下,通过对第一个容器使用 8001:80,对第二个容器使用 8002:80,可以很容易地实现这一点。
在Kubernetes 中也很容易实现。只需将两个容器放在不同的位置Pods,您就不必使用 nginx 配置进行操作以使其侦听不同于80. 请注意,您提到的那两个 docker 容器不共享单个网络命名空间,这就是为什么它们都可以侦听80映射到主机系统(8001和8002)上不同端口的端口的原因。Kubernetes Pods不是这种情况。阅读有关微服务架构的更多信息,尤其是它是如何在k8s上实现的,您会注意到将几个容器放在一个Pod是非常罕见的用例,绝对不应该应用于像您这样的情况。应该有充分的理由将 2 个或更多容器放入一个Pod. 通常,第二个容器对主容器具有一些补充功能。
Kubernetes 中常用的多容器Pod有3 种设计模式:sidecar、大使和适配器。通常所有这些都被简称为sidecar 容器。
请注意,Pod在上述所有用例中,两个或多个容器耦合在一起具有完全不同的功能。即使您在一个容器中放置了多个容器Pod(这是最常见的),但实际上它永远不会是相同类型的容器(例如在您的情况下,两个 nginx 服务器侦听不同的端口)。它们应该是互补的,并且应该有一个很好的理由将它们放在一起,为什么它们应该同时启动和关闭并共享相同的网络命名空间。带有运行在其中的监控代理的 Sidecar 容器具有对主容器(例如 nginx webserver)的补充功能。你可以在阅读一般更多关于容器设计模式这个文章。
我没有一个非常可靠的用例,因为我对 Kubernetes 和集群的概念还很陌生。
所以如果你对这种架构没有特别的理由,绝对不要走这条路。
我对集群的初步规划是将系统的所有容器放入一个 pod 中。这样我就可以随心所欲地复制这个 pod。
你不需要一个人Pod来复制它。您的集群中可以有很多replicaSets(通常由 管理Deployments),每个人负责运行Pod某种类型的声明数量的副本。
但是根据我现在得到的所有反馈,我似乎走错了方向。
是的,这绝对是错误的方向,但实际上已经说过了。我只想强调为什么这个方向是错误的。这种方法完全违背了微服务架构的想法,而这正是Kubernetes的设计初衷。将所有基础设施放在一个巨大的空间中Pod并将所有容器紧密地绑定在一起是没有意义的。请记住,aPod 是Kubernetes 中最小的可部署单元,当其中一个容器崩溃时,整个容器也会Pod崩溃。您无法手动重新启动Pod.
我会检查我的结构并尝试使用你们提供的建议。谢谢大家!=)
这是一个好主意 :)
| 归档时间: |
|
| 查看次数: |
4599 次 |
| 最近记录: |