Labels are the mechanism used to organize Kubernetes objects. A label is a key-value pair with certain restrictions concerning length and allowed values but without any pre-defined meaning. You’re free to choose labels as you see fit, for example, to express environments such as “this pod is running in production” or ownership, like “department X owns that pod”.
aaa bbb ccc
Let’s create a pod that initially has one label (
$ kubectl apply -f https://raw.githubusercontent.com/openshift-evangelists/kbe/main/specs/labels/pod.yaml
get subcommand can be used to display a pod’s labels:
$ kubectl get pods --show-labels
The labels are rendered as an additional column in the output:
NAME READY STATUS RESTARTS AGE LABELS labelex 1/1 Running 0 6s env=development
You can add a label to the pod through the
$ kubectl label pods labelex owner=michael
get subcommand from above shows the new label in addition to the existing one:
NAME READY STATUS RESTARTS AGE LABELS labelex 1/1 Running 0 65s env=development,owner=michael
To use a label for filtering, for example to list only pods that have an
owner that equals
michael, use the
$ kubectl get pods --selector owner=michael
--selector option can be abbreviated to
-l, so selecting pods that are labelled with
env=development can also be done using:
$ kubectl get pods -l env=development
Oftentimes, Kubernetes objects support set-based selectors.
Let’s launch another pod that has two labels (
$ kubectl apply -f https://raw.githubusercontent.com/openshift-evangelists/kbe/main/specs/labels/anotherpod.yaml
Now, let’s list all pods that are either labelled with
env=development or with
$ kubectl get pods -l 'env in (production, development)'
Since we have each pod has one of those two labels, they both appear in the output:
NAME READY STATUS RESTARTS AGE labelex 1/1 Running 0 6m39s labelexother 1/1 Running 0 46s
Other verbs also support label selection. For example, you could remove both of these pods with the same selector:
$ kubectl delete pods -l 'env in (production, development)'
Beware that this will destroy any pods with those labels.
You can also delete them directly, via their names, with:
$ kubectl delete pods labelex $ kubectl delete pods labelexother
Note that labels are not restricted to pods. In fact you can apply them to all sorts of objects, such as nodes or services.