kubectl run is a command that can “create and run a particular image in a pod”, which means that it will start a pod with a particular image. It can also create the pod with some particular details by using combinations of flags. We can see the code for it in pkg/cmd/run/run.go.
Interesting Flags
--image
specifies the image to be executed.--command
allows to overwrite the command field in the container with whatever arguments are sent after--
.--env
to set environment variables in the pods, in the form ofkey:value
and one variable per--env
flag.--expose
and--port
to create a ClusterIP associated with the pod.--labels
which allows us to configure labels for the specific pod. Labels are accepted with only one flag, separated by a comma.--dry-run
for testing purposes.
Examples
From documentation:
kubectl run nginx --image=nginx
kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod"
kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>
Use Case
While I don’t see much use in kubectl run
for dealing with production grade systems, it can be a great resource for testing out different configurations of pods and creating a bunch of pods if there’s a need for it. It can also be a great introductory command for when first starting to deal with Kubernetes because it eases the interaction with Kubernetes without having to deal with YAML right away.
Due to its --output
flag, it can also be a great way to use kubectl
to create pods, in a stable way, from scripts because we can have stable and reproducible outputs from it. The fact that we can use a --dry-run
flag is also a big plus.