我如何运行Kubernetes吊舱,唯一的目的是针对它运行exec?

我如何运行Kubernetes吊舱,唯一的目的是针对它运行exec?,kubernetes,containers,command-line-interface,Kubernetes,Containers,Command Line Interface,在您发表评论或回答之前,请先回答此问题,此问题与CLI程序有关,而不是与服务有关。显然,90%的Kubernetes都与运行服务有关,因此对于作为管道工作流一部分的CLI程序,文档很少 我有一个命令行程序,它使用标准输出JSON结果 我有一个命令行程序的docker映像 如果我将容器创建为Kubernetes作业,那么stdout和stderr是混合的,需要启发式清理才能得到纯JSON stderr消息来自我无法直接控制的本机库 假设,如果我对一个正在运行的pod运行kubectl exec,我

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

我有一个命令行程序,它使用标准输出JSON结果

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

如果我将容器创建为Kubernetes作业,那么stdout和stderr是混合的,需要启发式清理才能得到纯JSON

stderr消息来自我无法直接控制的本机库

假设,如果我对一个正在运行的pod运行
kubectl exec
,我将得到正常的stdout/stderr管道

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

有没有办法让吊舱在没有入口点的情况下运行[…]

吊舱由一个或多个容器组成,每个容器都有一个单独的入口点。当然可以使用伪命令运行容器,例如,您可以使用以下命令构建图像:

CMD sleep inf
这将运行一个容器,该容器将一直持续到您杀死它为止,您可以愉快地
docker exec
将其放入其中

您可以将相同的解决方案应用于k8s。您可以如上所述构建映像并将其部署到pod中,也可以使用现有映像并简单地设置命令,如中所示:

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

您可以将kubectl用作docker cli

kubectl run
只需完成这项工作。没有必要采取变通办法

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

kubectl run -i -t busybox --image=busybox --restart=Never

很好!当然希望我可以使用Job,因为附加TTY会将I/O限制在容器内,这不是我想要的。我知道关于
kubectl run
,我现在正在研究它,但它不适用于
覆盖
JSON,因为某些原因我正在给它。我特别想知道Iarsks解释的Hmm是如何在卷上运行的?好的,附加TTY是可选的,没有它,容器运行默认的comand或entrypoint and stop。例如,我使用它来运行一些测试,当它完成时,我使用
kubectl logs busybox*
浏览日志,并使用
kubectl exec-ti busybox sh
在pod中生成结果。您不能使用
kubectl run
装载卷,但可以使用
kubectl cp
将文件从pod获取到您的计算机