Novaterata
Novaterata

Reputation: 4789

How can I run a Kubernetes pod with the sole purpose of running exec against it?

Please before you comment or answer, this question is about a CLI program, not a service. Apparently 90% of Kubernetes has to do with running services, so there is sparse documentation for CLI programs meant to be part of a pipeline workflow.

I have a command line program that uses stdout for JSON results.

I have a docker image for the command line program.

If I create the container as a Kubernetes Job, than stdout and stderr are mixed and require heuristic scrubbing to get pure JSON out.

The stderr messages are from native libraries outside of my direct control.

Supposedly, if I run kubectl exec against a running pod, I will get the normal stdout/stderr pipes.

Is there a way to just have the pod running without an entrypoint (or some dummy service entrypoint) with the sole purpose of running kubectl exec against it?

Upvotes: 3

Views: 3755

Answers (2)

You can use kubectl as docker cli https://kubernetes.io/docs/reference/kubectl/docker-cli-to-kubectl/

kubectl run just do the job. There is no need for a workaround.

Aditionally, you can attach I/O and disable automatic restart:

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

Upvotes: 0

larsks
larsks

Reputation: 311635

Is there a way to just have the pod running without an entrypoint [...]?

A pod consists of one or more containers, each of which has an individual entrypoint. It is certainly possible to run a container with a dummy command, for example, you can build an image with:

CMD sleep inf

This will run a container that will persist until you kill it, and you could happily docker exec into it.

You can apply the same solution to k8s. You could build an image as described above and deploy that in a pod, or you could use an existing image and simply set the command, as in:

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

Upvotes: 4

Related Questions