请在评论或回答之前,这个问题是关于CLI程序,而不是服务。显然,90%的Kubernetes与运行服务有关,因此有很少的CLI程序文档可以作为管道工作流程的一部分。
我有一个命令行程序,它使用stdout来获取JSON结果。
我有一个命令行程序的docker镜像。
如果我将容器创建为Kubernetes Job,则stdout和stderr混合在一起,需要启发式擦洗才能获得纯JSON。
stderr消息来自我直接控制之外的本地库。
据说,如果我针对正在运行的pod运行kubectl exec
,我将获得正常的stdout / stderr管道。
有没有办法让pod在没有入口点(或一些虚拟服务入口点)的情况下运行,其唯一目的是针对它运行kubectl exec
?
答案 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