How to run a container in Kubernetes without creating Deployment or Job?

5/23/2016

I'm trying to run an interactive Pod (container) in Kubernetes that does not create a Job or Deployment and deletes itself after completing.

The purpose of the container is to give our developers an easy way to access our database, which doesn't have a public IP address.

Currently, we are using this command:

kubectl run -i --tty proxy-pgclient --image=private-registry.com/pgclient --restart=Never --env="PGPASSWORD=foobar" -- psql -h dbhost.local -p 5432 -U pg_admin -W postgres

which works the first time you run it, however, after exiting the session if you try to run the above again to connect to the database again, we get:

Error from server: jobs.extensions "proxy-pgclient" already exists

Forcing the developer to delete the job with:

kubectl delete job proxy-pgclient

before they can run the command and connect again.

Is there any way of starting up an interactive container (Pod) in Kubernetes without creating a Job or Deployment object and having that container be deleted when the interactive session is closed?

-- srkiNZ84
kubernetes

2 Answers

5/24/2016

Adding the "--rm" flag to the original command resulted in the Job (and Pod) being deleted at the completion of the interactive session, which is what I was after. The command then becomes:

kubectl run -i --tty --rm proxy-pgclient --image=private-registry.com/pgclient --restart=Never --env="PGPASSWORD=foobar" -- psql -h dbhost.local -p 5432 -U pg_admin -W postgres
-- srkiNZ84
Source: StackOverflow

5/23/2016

There isn't a short kubectl command that will do exactly what you want. Instead, you can create a yaml/json file with your pod description and run kubectl create -f pod.yaml. Your pod can be set to never restart, so it will terminate once it exits.

-- Robert Bailey
Source: StackOverflow