Labels

Part of the metadata of an object is a label. Though labels are not API objects, they are an important tool for cluster administration. They can be used to select an object based on an arbitrary string, regardless of the object type. Labels are immutable as of API version apps/v1.

Every resource can contain labels in its metadata. By default, creating a Deployment with kubectl create adds a label, as we saw in:

.... 
    labels:
        pod-template-hash: "3378155678"
        run: ghost ....

You could then view labels in new columns:

$ kubectl get pods -l run=ghost

NAME READY STATUS RESTARTS AGE

ghost-3378155678-eq5i6 1/1 Running 0 10m

$ kubectl get pods -L run

NAME READY STATUS RESTARTS AGE RUN

ghost-3378155678-eq5i6 1/1 Running 0 10m ghost

nginx-3771699605-4v27e 1/1 Running 1 1h nginx

While you typically define labels in pod templates and in the specifications of Deployments, you can also add labels on the fly:

$ kubectl label pods ghost-3378155678-eq5i6 foo=bar

$ kubectl get pods --show-labels

NAME READY STATUS RESTARTS AGE LABELS

ghost-3378155678-eq5i6 1/1 Running 0 11m foo=bar, pod-template-hash=3378155678,run=ghost

For example, if you want to force the scheduling of a pod on a specific node, you can use a nodeSelector in a pod definition, add specific labels to certain nodes in your cluster and use those labels in the pod.

Last updated