如何运行Kubernetes pod,其唯一目的是运行exec对抗它?

时间:2017-12-21 14:43:23

标签: kubernetes containers command-line-interface

请在评论或回答之前,这个问题是关于CLI程序,而不是服务。显然,90%的Kubernetes与运行服务有关,因此有很少的CLI程序文档可以作为管道工作流程的一部分。

我有一个命令行程序,它使用stdout来获取JSON结果。

我有一个命令行程序的docker镜像。

如果我将容器创建为Kubernetes Job,则stdout和stderr混合在一起,需要启发式擦洗才能获得纯JSON。

stderr消息来自我直接控制之外的本地库。

据说,如果我针对正在运行的pod运行kubectl exec,我将获得正常的stdout / stderr管道。

有没有办法让pod在没有入口点(或一些虚拟服务入口点)的情况下运行,其唯一目的是针对它运行kubectl exec

2 个答案:

答案 0 :(得分:2)

  

有没有办法让pod在没有入口点的情况下运行?...

一个pod由一个或多个容器组成,每个容器都有一个单独的入口点。使用虚拟命令运行容器当然是可能的,例如,您可以使用以下命令构建映像:

CMD sleep inf

这将运行一个容器,该容器将一直持续到你杀死它为止,你可以很高兴docker exec进入它。

您可以将相同的解决方案应用于k8s。您可以如上所述构建映像并将其部署在窗格中,或者您可以使用现有映像并只需设置命令,如:

spec:
  containers:
  - name: mycontainer
    image: myexistingimage
    command: ["sleep", "inf"]

答案 1 :(得分:0)

您可以将kubectl用作docker cli https://kubernetes.io/docs/reference/kubectl/docker-cli-to-kubectl/

public static Example example; 只是做这个工作。无需解决方法。

另外,您可以附加I / O并禁用自动重启:

kubectl run