My task is to add a label named "app" to all deployments
, daemonsets
, and cronjobs
so that it's easier to query our apps across the stack in our monitoring tools. This way, we can build dashboards that use a single selector, namely app.
To avoid downtime I've decided to resolve this issue in the following steps:
When using $ kubectl apply
to update the resources I've added the "app" label to/replaced "service" label with "app" labels to, I run into the following error:
Error from server (Invalid): error when applying patch: {longAssPatchWhichIWon'tIncludeButYaGetThePoint} to: &{0xc421b02f00 0xc420803650 default provisioning manifests/prod/provisioning-deployment.yaml 0xc 42000c6f8 3942200 false} for: "manifests/prod/provisioning-deployment.yaml": Deployment.apps "provisioning" is invalid: s pec.template.metadata.labels: Invalid value: map[string]string{"app":"provisioning", "component" :"marketplace"}:
selector
does not match templatelabels
I need some insights on why it's throwing this error.
Labels are key/value pairs that are attached to objects, such as pods. Labels are intended to be used to specify identifying attributes of objects that are meaningful and relevant to users, but do not directly imply semantics to the core system.
Labels are properties that we can attach to each item for example for their type, kind, and so on. Selectors help us in finding these items. You can think of a selector as a filter. We could label pods based on some attributes i.e. app name, front-end, back-end.
It seems you are in trouble. Check this section: Label selector updates
Note: In API version
apps/v1
, a Deployment’s label selector is immutable after it gets created.
So, this line say you can not update selector
once deployment is created. Selector can not be changed for any API version except apps/v1beta1
and extension/v1beta1
. Ref: TestDeploymentSelectorImmutability.
One possible workaround might be to keep the old labels and adding new labels along with old ones. This way, you don't have to update selector
. Deployment will select pods using old labels but your dashboard can select using new labels. This might not meet your requirement but I don't see any better way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With