Labels and Annotations
This part of the Best Practices Guide discusses the best practices for using labels and annotations in your chart.
Is it a Label or an Annotation?
An item of metadata should be a label under the following conditions:
- It is used by Kubernetes to identify this resource
- It is useful to expose to operators for the purpose of querying the system.
For example, we suggest using helm.sh/chart: NAME-VERSION
as a label so that operators can conveniently find all of the instances of a particular chart to use.
If an item of metadata is not used for querying, it should be set as an annotation instead.
Helm hooks are always annotations.
Standard Labels
The following table defines common labels that Helm charts use. Helm itself never requires that a particular label be present. Labels that are marked REC are recommended, and should be placed onto a chart for global consistency. Those marked OPT are optional. These are idiomatic or commonly in use, but are not relied upon frequently for operational purposes.
Name | Status | Description |
---|---|---|
app.kubernetes.io/name | REC | This should be the app name, reflecting the entire app. Usually {{ template “name” . }} is used for this. This is used by many Kubernetes manifests, and is not Helm-specific. |
helm.sh/chart | REC | This should be the chart name and version: {{ .Chart.Name }}-{{ .Chart.Version | replace “+” “_” }} . |
app.kubernetes.io/managed-by | REC | This should always be set to {{ .Release.Service }} . It is for finding all things managed by Helm. |
app.kubernetes.io/instance | REC | This should be the {{ .Release.Name }} . It aids in differentiating between different instances of the same application. |
app.kubernetes.io/version | OPT | The version of the app and can be set to {{ .Chart.AppVersion }} . |
app.kubernetes.io/component | OPT | This is a common label for marking the different roles that pieces may play in an application. For example, app.kubernetes.io/component: frontend . |
app.kubernetes.io/part-of | OPT | When multiple charts or pieces of software are used together to make one application. For example, application software and a database to produce a website. This can be set to the top level application being supported. |
You can find more information on the Kubernetes labels, prefixed with app.kubernetes.io
, in the Kubernetes documentation.