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

问题描述 投票:1回答:2

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

前端与后端通信以访问服务,我认为它应该在同一网络中,前端从localhost调用服务。我无法访问代码,因为它是由公司开发的专有应用程序,它不支持Kubernetes,因此修改代码是不可能的。

我认为主要原因是因为前端和后端运行在不同的pod上,具有不同的IP。

当前端尝试调用API时,它找不到该服务,并返回错误。因此,我正在尝试将前端映像和后端映像部署到同一个pod中,因此它们共享相同的群集IP。

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

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

docker kubernetes containers cluster-computing pod
2个回答
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

0
投票

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

虽然您已经接受了已经接受的答案,即解决在同一个容器中运行更多容器的示例,但我想指出一些细节:

  • 只有当容器一起扩展时,容器才应位于同一个容器中(如果您希望通过clusterIP在它们之间进行通信)。你的前端/后端部门的场景看起来并不像是把它们塞进去的好候选者。
  • 如果您选择将容器放在同一个pod中,则可以通过localhost进行通信(它们看到彼此就好像两个进程在同一主机上运行(除了文件系统不同的部分),并且可以使用localhost进行直接通信,因为其中不能分配同一个端口。使用集群IP就好像在同一主机上两个进程通过外部ip进行通信。
  • 更多kubernetes哲学方法在这里将是: 为后端创建部署 为后端创建服务(暴露必要的端口) 为前端创建部署 使用后端服务名称(kube-dns将此解析为后端服务的集群IP)和指定的后端端口从前端到后端进行通信。 (可选)(对于此示例)为外部访问或外部访问创建前端服务。请注意,在这里您可以为后端服务分配相同的端口,因为它们不在同一个pod(主机)上...

这种方法的一些好处包括:您可以更好地隔离后端(后端 - 前端通信仅在群集内,不暴露给外部世界),您可以在节点上独立调度它们,您可以单独扩展它们(假设您需要更多后端)电源,但正面处理流量ok或反之亦然),你可以独立替换其中任何一个等...

© www.soinside.com 2019 - 2024. All rights reserved.