Labels
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".
Let's create a pod that initially has one label (env=development
):
kubectl apply -f https://github.com/openshift-evangelists/kbe/raw/main/specs/labels/pod.yaml
The 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 label
subcommand:
kubectl label pods labelex owner=michael
Running the 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 --selector
option:
kubectl get pods --selector owner=michael
The --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 (env=production
and owner=michael
):
kubectl apply -f https://github.com/openshift-evangelists/kbe/raw/main/specs/labels/anotherpod.yaml
Now, let's list all pods that are either labelled with env=development
or with env=production
:
kubectl get pods -l 'env in (development, production)'
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. Beware that this will destroy any pods with those labels.
kubectl delete pods -l 'env in (development, production)'
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.