web-dev-qa-db-fra.com

Erreur: le sélecteur ne correspond pas aux étiquettes de modèle

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:

  1. Ajoutez des étiquettes aux environnements de développement, de test et de mise en scène.
  2. Ajoutez des étiquettes aux env de prod.
  3. Déployer (1)
  4. Déployer (2)
  5. Supprimez les anciennes étiquettes et mettez à jour les services de dev pour utiliser les nouvelles étiquettes. Ensuite, testez et déployez. (actuellement sur cette étape)
  6. Répétez (5) pour l'étape.
  7. Répétez (5) pour prod.

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èle labels

J'ai besoin de quelques informations sur la raison pour laquelle cette erreur est générée.

6
seemcat

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.

11
Emruz Hossain

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!

1