首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在接受命令行参数的kubernetes上运行坞映像?

如何在接受命令行参数的kubernetes上运行坞映像?
EN

Stack Overflow用户
提问于 2019-01-29 15:11:30
回答 3查看 737关注 0票数 0

我有一个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映像部署为服务,并将文件的内容作为输入发送到服务?我需要一个网络服务器吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-29 23:31:41

Kubernetes通常假定它部署的容器寿命长,并且是自主的。如果您要在Pod中部署某些东西,特别是通过部署,那么它应该能够在没有任何特定输入的情况下自行运行。如果它立即退出,Kubernetes将重新启动它,您将很快进入可怕的CrashLoopBackOff状态。

简而言之:您需要重新设计容器以避免使用stdin,而stdout是它的主要接口。

将网络端点添加到服务中的本能可能是正确的,但是Kubernetes不会单独这样做。如果您重新构建您的应用程序,例如,拥有一个Flask服务器并在端口上侦听,那么您可以很容易地将其部署到Kubernetes。如果应用程序希望在stdin上输入数据并将其结果输出到stdout,那么添加Kubernetes网络元数据不会有任何帮助:在您的示例中,如果8080端口上的容器中没有任何内容正在侦听,那么网络连接将永远不会到达任何地方。

票数 1
EN

Stack Overflow用户

发布于 2019-01-29 15:59:55

我猜库伯内特斯是在酒店里跑的。我会做以下几点。

  • 创建nginx或apache部署。使用Helm,它非常容易使用

舵安装稳定/nginx入口

  • 使用端口8080创建一个部署,或者使用docker运行它所暴露的任何内容。实际部署将有一个API,我可以通过POST发送内容。
  • 使用端口8080和targetPort 8080创建服务。它应该是ClusterIP类型。
  • 创建一个主机名和servicePort为8080的入口。
票数 1
EN

Stack Overflow用户

发布于 2019-01-29 22:25:02

由于在运行命令时将文件作为参数传递,因此我认为,一旦容器上有了内容,就不需要更新csv的内容。

实现该文件读取操作的最佳方法是在您的Dockerfile上对该文件进行添加,并使用打开函数打开该文件。

你会有这样的一条线

代码语言:javascript
复制
ADD file.csv /home/file.csv

在您的python代码中,如下所示:

代码语言:javascript
复制
file_in = open(‘home/file.csv’, ‘r’)

请注意,如果要更改文件,则需要更新Dockerfile、重新构建、推送到注册表并重新部署到GKE。如果不想遵循此过程,可以使用ConfigMap

此外,如果这回答了您的问题,请确保将您的相同问题链接到server断层上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54424063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档