如何在 kubernetes 上运行接受命令行参数的 docker 镜像?

如何在 kubernetes 上运行接受命令行参数的 docker 镜像?

我的问题类似于这个。我有一个 docker 镜像,其中包含一个使用 sys.stdin() 从命令行接受参数的 python 文件。我可以使用以下命令运行该镜像

cat 文件.csv | docker run -i -t my_image

它将 file.csv 的内容通过管道传输到图像,我得到了预期的输出。

现在我想将此映像部署到 kubernetes。我可以使用 docker 在服务器上运行该映像,没有任何问题。但根据谷歌教程,如果我对其进行 curl 操作,它应该会返回响应,但我没有收到响应,因为我没有在任何端口上监听 Web 服务器。我继续使用以下命令构建部署。

kubectl run -i my_deployment --image=gcr.io/${PROJECT_ID}/my_image:v1 --port 8080

它构建了部署,我可以看到 Pod 正在运行。然后我将其公开。

kubectl 公开部署 my_deployment --type=LoadBalancer --port 80 --target-port 8080

但如果我尝试使用 curl 分配的 IP 来访问它,

卷曲http://分配的 IP

它只是说连接被拒绝。

如何将此 docker 镜像部署为服务并将文件内容作为输入发送到服务?我需要一个 Web 服务器吗?

答案1

读取标准输入和读取网络请求是非常不同的事情。

如果您希望通过 HTTP 进行输入,那么您需要一个 HTTP 服务器来接收请求、解析它并将其发送到您的应用程序。

如果您只想要 TCP,而不是 HTTP,那就简单一些,您可能可以做一些事情来socat监听套接字并将输出传递到 stdout 并通过您的应用程序进行管道传输。

但是 Kubernetes 中没有任何东西可以神奇地将 TCP/IP 转换为 stdin。

相关内容