Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between. annotations and labels in in Kubernetes?

I'm trying to wrap my head around the difference between annotations and labels.

My understanding of annotations is that it is metadata that adds key-value pairs that cannot be used by Kubernetes for identifying/filtering the resource.

Labels on the other hand are metadata key-value pairs that can be used by Kubernetes to identify/filter the resource.

Is this right? If this is so, then what is the practical use of annotations? Is it something to do with performance? Where labels are under the scanner of Kubernetes for filters and annotations are purely for adding metadata that is just informational?

But I've seen in cases where deployments needing Nginx or ingress capabilities using annotations. Then how does this get searched or used. Why are labels not used here instead?

When do we use annotations over labels and vice-versa? What are the pros and cons of each?

My understanding is rather limited here, however reading the official docs has not really helped me understand the use case of when do I use annotations vs labels.

like image 899
Vipin Menon Avatar asked Mar 02 '23 15:03

Vipin Menon


1 Answers

Labels are key/value pairs that can be attached to Kubernetes objects such as Pods and ReplicaSets. They can be arbitrary, and are useful for attaching identifying information to Kubernetes objects. Labels provide the foundation for grouping objects.

Annotations, on the other hand, provide a storage mechanism that resembles labels: annotations are key/value pairs designed to hold nonidentifying information that can be leveraged by tools and libraries.

-- Kubernetes up & running, Chapter 6

Labels are used to identify resources

Examples of what labels can do:

  • find all pods that have a value associated with the key

    kubectl get pods -l key=val,key2=val2

  • merge and stream logs of the various pod that share the same label

    kubectl logs -l key=val

The reason why labels are used as selectors as opposed to annotations is because most Kubernetes implementation index labels in etcd.

Annotations are used to store data about the resource itself

This usually consists of machine-generated data, and can even be stored in JSON form.

Examples:

  • last updated
  • managed by
  • sidecar injection configuration etc
like image 74
kirin nee Avatar answered Mar 04 '23 04:03

kirin nee