What is the colon in kubectl run command

12/8/2020

Recently when I am reading Kubernetes documentation, I met the command like below:

kubectl run curl --image=radial/busyboxplus:curl -i --tty

I know the kubectl run syntax is like the part before the colon, however I am not sure what is colon usage in the kubectl run, it is not mentioned in kubectl run syntax2, which is:

$ kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client] [--overrides=inline-json] [--command] -- [COMMAND] [args...]

And also I am not sure what is the usage of

curl -i --tty

from documentation, -i stands for "stdin", but why need --tty ?

-- IcyBrk
kubernetes

2 Answers

12/8/2020

I am not sure what is colon usage in the kubectl run

It's the docker container's "tag", which identifies which version of radial/busyboxplus you wish for kubernetes to run

from documentation, -i stands for "stdin", but why need --tty ?

That is only required if the process expects to interact with a virtual terminal; you are free to omit it, and only add it back in if the container emits an error. The same is true for the -i -- or actually, in this case, it is more likely that you can omit the -i than --tty unless you are expecting to read the curl payload from your local machine

-- mdaniel
Source: StackOverflow

12/8/2020

+1 to mdaniel's answer however let me also add a few words to what was already said.

First of all I must say that you're grouping the expressions in quite a strange way 🙂 And it's not about kubectl command syntax but general convention applied to all Unix/Linux commands. Just take a look at it again:

kubectl run curl --image=radial/busyboxplus:curl -i --tty

There are no spaces between : and preceding/proceeding part so your natural interpretation should be rather that the following fragment:

--image=radial/busyboxplus:curl

is a separated/extracted part of the whole command. It's a flag --image belonging to kubectl run command specification with its value which happens to be radial/busyboxplus:curl. And this value cannot be part of kubectl specification as here you put simply the name of the docker image so your searching should go naturally to docker images naming convention rather looking for the meaning of : in context of kubectl command.

And this is nothing unusual. As mdaniel already stated in his answer, after : you specify docker image tag. Compare it with this example where nginx:1.14.2 is used. Using only nginx means nginx:latest as by default the latest tag is used but if we want a specific image version, we can provide it as tag, in this case 1.14.2 after the :.

In your example it's an image named radial/busyboxplus and tagged curl. In other words curl is the specific version of the radial/busyboxplus image.

As to:

curl -i --tty

such grouping of the expression is completely wrong. You posted it as if there was something like:

--image=radial/busyboxplus:"curl -i --tty"

in your command. ❗ But there aren't any quotes there.

So coming back again to Unix command convention, you should never group parts of the expression this way. Let's take a look again at your command:

kubectl run curl --image=radial/busyboxplus:curl -i --tty

There are meaningful spaces in between the individual parts of the command so both -i and --tty are flags of kubectl run command, the same as --image and are part of its specification.

To avoid any confusion you can re-arrange it a bit and it could look as well like this:

kubectl run curl -i --tty --image=radial/busyboxplus:curl

To check the meaning and usage of both flags you just need to run:

kubectl run --help

(the meaning and justification for use of -i and --tty has already been well expalained by mdaniel.)

-- mario
Source: StackOverflow