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.
Labels are metadata assigned to objects for identification purposes. For instance, a service selects the backend pod using the labels on pods.
Annotations are additional metadata that can be open-ended. It may be used for documentation purposes, or it can be used for configuring an object. For instance, the Nginx ingress controller reads those annotations on the running pod and uses them to configure the underlying NGinx instance. How annotations are used is completely up to the implementation.