在码头工人中,我有两个容器Mosquitto
abd userInfo
userInfo
是一个容器,它执行一些逻辑,然后将结果发送到mosquitto容器。 Mosquitto容器然后使用此信息将其发送到IOT中心。为了在Docker中启动这些容器,我创建了一个网络并在同一网络中启动了这两个容器。因此,我可以轻松地使用mosquitto
容器内的userinfo
容器的主机名来发送数据。我需要在kubernetes中这样做。
所以在kubernetes,我做了什么,我部署了Mosquitto
所以它的POD已经创建,然后我创建了它的服务并在userInfo
pod中使用它将数据发送到mosquitto
。但这不起作用。
我使用
创建了服务kubectl expose deployment mosquitto
我需要将userInfo
的数据发送到Mosquitto
。
我怎样才能做到这一点。
我是否需要像dockers
那样创建网络,或者还有其他任何方式。
我还尝试用两个容器创建一个容器,即mosquitto
& userInfo
,但这也无效。
由于
答案 0 :(得分:3)
Kubernetes pod可能包含多个容器。当两个容器紧密耦合时,人们通常在一个容器中运行多个容器,听起来这就是你正在寻找的东西。这些容器保证托管在同一台机器上(它们可以通过localhost相互联系),共享相同的端口空间,也可以使用相同的卷。 https://kubernetes.io/docs/concepts/workloads/pods/pod/#what-is-a-pod
答案 1 :(得分:-1)
如果您对属于同一个POD的两个容器之间的通信感兴趣,那么官方文档中的the guide将显示如何通过共享卷实现此目的。
Pod可以拥有多个容器的主要原因是支持辅助主应用程序的帮助应用程序。辅助应用程序的典型示例是数据提取器,数据推送器和代理。帮助程序和主要应用程序通常需要相互通信。通常,这是通过共享文件系统完成的,如本练习所示,或通过环回网络接口localhost完成。
如果您不需要,请尽量避免将两个容器放在同一个POD中。其他信息可在此处找到:Multi-container pods and container communication in Kubernetes。
在这种情况下(对于前一种情况也可以这样做),最好的方法是通过service暴露容器的监听过程。
通过这种方式,您将始终可以依赖于相同的IP或域名(您只能在内部解析)和端口。
For example,如果您在Kubernetes命名空间"my-service"
中有一个名为"my-ns"
的服务,则会创建"my-service.my-ns"
的DNS记录。
网络部分由Kubernetes管理,因此您不需要做任何事情(在基本配置中),仅在创建服务时指示哪个是容器的目标端口以及客户端应该使用的端口和映射是自动的。
然后,当您暴露端口和IP如何实现通信时,数据传输不再是Kubernetes问题。您可以通过具有静态内容的Web服务器,通过FTP,使用脚本发送SCP命令来实现它,基本上有无限的方法来执行它。