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