Labels and Selectors

Labels are key/value pairs that are attached to Kubernetes objects, such as pods (this is usually done indirectly via deployments). Labels are intended to be used to specify identifying attributes of objects that are meaningful and relevant to users. Labels can be used to organize and to select subsets of objects. See Labels and Selectors in the Kubernetes documentation for more information.

The following Kubernetes labels have a defined meaning in our Zalando context:

application
Application ID as defined in our Kio application registry. Example: “zmon-controller”
version
User-defined application version. This is used as input for the CI/CD pipeline and usually references a Docker image tag. Example: “cd53”
release
Incrementing release counter. This is generated by the CI/CD pipeline and is used for traffic switching. Example: “4”
stage
Deployment stage to allow canary deployments. Allowed values are “canary” and “production”.
owner
Owner of the Kubernetes resource. This needs to reference a valid organizational entity in the context of the cluster’s business partner. Example: “team/eagleeye”

Some labels are required for every deployment resource:

  • application
  • version
  • release
  • stage

Example deployment metadata:

metadata:
  labels:
    application: my-app
    version: "v31"
    release: "r42"
    stage: production

Kubernetes services will usually select only on application and stage:

kind: Service
apiVersion: v1
metadata:
  name: my-app
spec:
  selector:
    application: my-app
    stage: production
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP

You can always define additional custom labels as long as they don’t conflict with the above label catalog.