Updated on 2024-01-26 GMT+08:00

Label for Managing Pods

Why We Need Labels

As resources increase, how to classify and manage resources becomes important. Kubernetes provides a mechanism to classify resources, that is, using labels. Labels are simple but powerful. Almost all resources in the Kubernetes can be organized by labels.

A label is a key-value pair. It can be set either during or after resource creation. You can easily modify it when needed at any time.

The following figures show how labels work. Assume that you have multiple pods of various kinds. It could be challenging when you manage them.

Figure 1 Pods without classification

After we add labels to them. It is much clearer.

Figure 2 Pods classified using labels

Adding a Label

The following example shows how to add labels when you are creating a pod.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:                     # Add labels app=nginx and env=prod to the pod.
    app: nginx    
    env: prod
spec:
  containers:
  - image: nginx:alpine
    name: container-0
    resources:
      limits:
        cpu: 100m
        memory: 200Mi
      requests:
        cpu: 100m
        memory: 200Mi
  imagePullSecrets:
  - name: default-secret

After you add labels to a pod, you can view the labels by adding --show-labels when querying the pod.

$ kubectl get pod --show-labels
NAME              READY   STATUS    RESTARTS   AGE   LABELS
nginx             1/1     Running   0          50s   app=nginx,env=prod

You can also use -L to query only certain labels.

$ kubectl get pod -L app,env 
NAME              READY   STATUS    RESTARTS   AGE   APP     ENV
nginx             1/1     Running   0          1m    nginx   prod

For an existing pod, you can run the kubectl label command to add labels.

$ kubectl label pod nginx creation_method=manual
pod/nginx labeled

$ kubectl get pod --show-labels
NAME              READY   STATUS    RESTARTS   AGE   LABELS
nginx             1/1     Running   0          50s   app=nginx, creation_method=manual,env=prod

Modifying a Label

Add --overwrite to the command to modify a label.

$ kubectl label pod nginx env=debug --overwrite
pod/nginx labeled

$ kubectl get pod --show-labels
NAME              READY   STATUS    RESTARTS   AGE   LABELS
nginx             1/1     Running   0          50s   app=nginx,creation_method=manual,env=debug