我有一个docker映像,其中包含一个python文件,它使用sys.stdin()接受命令行中的参数。我可以使用以下命令运行图像
猫file.csv +码头运行-i -t my_image
它将file.csv的内容输送到图像中,我得到了预期的输出。
现在,我想将这个映像部署到kubernetes。我可以使用docker在服务器上运行映像,没有任何问题。但是,如果我卷曲到它,它应该发送回一个响应,但我没有得到它,因为我没有一个web服务器监听任何端口。我继续使用下面的命令构建了一个部署。
kubectl run -i my_deployment --image=gcr.io/${PROJECT_ID}/my_image:v1 -端口8080
它构建了部署,我可以看到吊舱在运行。然后我把它暴露出来。
kubectl公开部署my_deployment --type=LoadBalancer -端口80 --目标--端口8080
但如果我想用卷曲分配的IP来访问它,
卷曲ip地址
我得到了“连接被拒绝”的回应。
如何在kubernetes上将这个docker映像部署为服务,并将文件的内容作为输入发送到服务?我需要一个网络服务器吗?
发布于 2019-01-29 15:31:41
Kubernetes通常假定它部署的容器寿命长,并且是自主的。如果您要在Pod中部署某些东西,特别是通过部署,那么它应该能够在没有任何特定输入的情况下自行运行。如果它立即退出,Kubernetes将重新启动它,您将很快进入可怕的CrashLoopBackOff
状态。
简而言之:您需要重新设计容器以避免使用stdin,而stdout是它的主要接口。
将网络端点添加到服务中的本能可能是正确的,但是Kubernetes不会单独这样做。如果您重新构建您的应用程序,例如,拥有一个Flask服务器并在端口上侦听,那么您可以很容易地将其部署到Kubernetes。如果应用程序希望在stdin上输入数据并将其结果输出到stdout,那么添加Kubernetes网络元数据不会有任何帮助:在您的示例中,如果8080端口上的容器中没有任何内容正在侦听,那么网络连接将永远不会到达任何地方。
发布于 2019-01-29 07:59:55
我猜库伯内特斯是在酒店里跑的。我会做以下几点。
舵安装稳定/nginx入口
发布于 2019-01-29 14:25:02
https://stackoverflow.com/questions/54424063
复制