Kubernetes-将多个映像部署到单个Pod

时间:2018-09-08 03:24:34

标签: docker kubernetes containers cluster-computing pod

我遇到一个问题,因为应用程序最初配置为在docker-compose上执行。 我设法将.yaml部署文件移植并重写到Kubernetes,但是,问题出在Pod的通信中。

前端与后端进行通信以访问服务,并且我认为前端应该在本地网络中调用服务,因为它应该位于同一网络中。 我无权访问该代码,因为它是公司开发的专有应用程序,并且不支持Kubernetes,因此修改代码是毫无疑问的。

我相信主要原因是因为前端和后端运行在具有不同IP的不同Pod上。

当前端尝试调用API时,它找不到服务,并返回错误。 因此,我试图将前端映像和后端映像都部署到同一容器中,以便它们共享相同的群集IP。

不幸的是,我不知道如何制作yaml文件来在单个pod中创建两个容器。

是否可以在同一容器上同时运行前端和后端容器,或者是否有另一种方法可以使容器进行通信(可能是代理)?

2 个答案:

答案 0 :(得分:2)

是的,您只需将条目添加到yaml文件中的containers部分,例如:

apiVersion: v1
kind: Pod
metadata:
name: two-containers
spec:
    restartPolicy: Never
containers:
    - name: nginx-container
      image: nginx
    - name: debian-container
      image: debian

答案 1 :(得分:0)

  

因此,我正在尝试将前端映像和后端映像都部署到同一容器中,以便它们共享相同的群集IP。

尽管您已经有了一个可以接受的答案,这是处理在同一容器中运行更多容器的示例,但我想指出一些细节:

  • 仅当容器一起缩放时,它们才应位于同一容器中(如果您不想通过它们之间的clusterIP进行通信,则不要)。您的前端/后端划分方案实际上并不是将它们塞在一起的好人选。

  • 如果您选择将容器放在同一个容器中,则它们可以通过localhost进行通信(它们彼此看到,就像两个进程在同一主机上运行(文件系统不同的部分除外)并且可以使用本地主机进行直接通信,因此无法分配相同的端口。使用群集IP就像在同一主机上,两个进程通过外部ip进行通信。

  • 更多的kubernetes哲学方法将是:

    • 为后端创建部署
    • 为后端创建服务(公开必要的端口)
    • 为前端创建部署
    • 使用后端服务名称(kube-dns将其解析为后端服务的集群ip)和指定的后端端口从前端到后端进行通信。
    • (对于此示例)(可选)为前端创建服务以供外部访问或任何外部访问。请注意,您可以在此处分配与后端服务相同的端口,因为它们不在同一Pod(主机)上。

此方法的一些好处包括:您可以更好地隔离后端(后端-前端通信仅在群集内,而不会暴露于外界),可以在节点上独立调度它们,可以独立扩展(例如需要更多后端功能,但前端可以正常处理流量,反之亦然),您可以单独替换其中的任何一个,等等...

相关问题