Ma tâche consiste à ajouter une étiquette nommée "app" à tous les deployments
, daemonsets
et cronjobs
afin qu'il soit plus facile d'interroger nos applications sur la pile dans nos outils de surveillance. De cette façon, nous pouvons créer des tableaux de bord qui utilisent un seul sélecteur, à savoir l'application.
Pour éviter les temps d'arrêt, j'ai décidé de résoudre ce problème en procédant comme suit:
Lors de l'utilisation de $ kubectl apply
pour mettre à jour les ressources auxquelles j'ai ajouté le libellé "app"/remplacé le libellé "service" par des libellés "app", je rencontre l'erreur suivante:
Erreur du serveur (non valide): erreur lors de l'application du correctif: { longAssPatchWhichIWon'tIncludeButYaGetThePoint } à: & {0xc421b02f00 0xc420803650 manifestes d'approvisionnement par défaut/prod/provisioning-deployment .yaml 0xc 42000c6f8 3942200 false} pour: "manifests/prod/provisioning-deployment.yaml": Deployment.apps "provisioning" n'est pas valide: s pec.template.metadata.labels: valeur non valide: map [string] string {"app ":" provisioning "," component ":" marketplace "}:
selector
ne correspond pas au modèlelabels
J'ai besoin de quelques informations sur la raison pour laquelle cette erreur est générée.
Il semble que vous ayez des ennuis. Vérifiez cette section: mises à jour du sélecteur d'étiquettes
Remarque: dans la version API
apps/v1
, le sélecteur d'étiquette d'un déploiement est immuable après sa création.
Ainsi, cette ligne indique que vous ne pouvez pas mettre à jour selector
une fois le déploiement créé. Le sélecteur ne peut être modifié pour aucune version d'API à l'exception de apps/v1beta1
et extension/v1beta1
. Réf: TestDeploymentSelectorImmutability .
Une solution de contournement possible pourrait être de conserver les anciennes étiquettes et d'ajouter de nouvelles étiquettes avec les anciennes. De cette façon, vous n'avez pas à mettre à jour selector
. Le déploiement sélectionnera les modules à l'aide d'anciennes étiquettes, mais votre tableau de bord peut sélectionner à l'aide de nouvelles étiquettes. Cela pourrait ne pas répondre à vos besoins, mais je ne vois pas de meilleure façon.
Cette erreur est difficile à lire, mais cela signifie que les étiquettes spécifiées dans spec.template.metadata.labels de votre définition de déploiement ne correspondent pas à celles de spec.selector.matchLabels dans la même définition. Téléchargez votre YAML si vous avez besoin d'aide. Meilleur!