À quoi sert spec-selector-matchLabels lors de la création d'un déploiement?

18

Depuis la documentation de Kubernetes :

Le champ de sélection définit comment le déploiement trouve les pods à gérer.

Mais, lors de la création du déploiement, je spécifie déjà le modèle de pod dans le cadre du déploiement. Alors, pourquoi aurai-je aussi besoin des sélecteurs?

Est-il censé être utilisé comme des services, où les modules sont déjà démarrés séparément, mais plus tard placés sous l'égide du déploiement pour être gérés ensemble?

Paddy
la source

Réponses:

8

Réponse à cette question, nous pouvons trouver dans la section Déploiements de kubernetes.io

Alors, pourquoi aurai-je aussi besoin des sélecteurs?

Citations ci-dessous de la documentation pour k8s v 1.14

.spec.selectorest un champ obligatoire qui spécifie un sélecteur d'étiquette pour les pods ciblés par ce déploiement.

.spec.selectordoit correspondre .spec.template.metadata.labels, sinon il sera rejeté par l'API.

Dans la version API, apps / v1, .spec.selector et .metadata.labels ne sont pas définis par défaut sur .spec.template.metadata.labels s'ils ne sont pas définis. Ils doivent donc être définis explicitement . Notez également que .spec.selector est immuable après la création du déploiement dans apps / v1.

Un déploiement peut mettre fin à des pods dont les étiquettes correspondent au sélecteur si leur modèle est différent de .spec.template ou si le nombre total de ces pods dépasse .spec.replicas. Il fait apparaître de nouveaux pods avec .spec.template si le nombre de pods est inférieur au nombre souhaité.

Les pods sont déjà démarrés séparément, mais plus tard placés sous l'égide du déploiement pour être gérés ensemble?

Pour parler simplement, non

Remarque: Vous ne devez pas créer d'autres modules dont les étiquettes correspondent à ce sélecteur, soit directement, en en créant un autre Deployment, soit en créant un autre contrôleur tel que a ReplicaSetou a ReplicationController. Si vous le faites, le premier Deploymentpense qu'il a créé ces autres pods. Kubernetesne vous empêche pas de le faire. Si vous avez plusieurs contrôleurs qui ont des sélecteurs qui se chevauchent, les contrôleurs se battront entre eux et ne se comporteront pas correctement.

alexander.polomodov
la source
5
Alors à quoi ça sert? Il semble que vous devriez toujours faire en sorte que le sélecteur corresponde aux étiquettes de la spécification… Y a-t-il des cas où il est utile de ne pas le faire?
Victor Noël
4
Ne répond pas vraiment à la question Pourquoi? - Pourquoi matchLabels existe et doit correspondre .spec.template.metadata.labels? Quel est son intérêt, comme cela specest défini de toute façon ci-dessous Deployment, il est donc clair quels pods sont démarrés pour le déploiement.
Ivan
2
Quiconque se heurte à cette discussion doit consulter la dernière documentation. Par exemple, actuellement .spec.selector n'est pas un champ facultatif. C'est un champ obligatoire. kubernetes.io/docs/concepts/workloads/controllers/deployment
SoftwareTheory
Merci beaucoup pour ton commentaire. Je pense que dans les nouveaux auteurs de la documentation ont corrigé à option nécessaire, parce que dans les anciens documents ce domaine a été dit en option , mais sur les auteurs de la prochaine ligne ajouté que ce champ doit être explicitement :) Donc , en réalité ce domaine a également été nécessaire
alexander.polomodov
@SoftwareTheory Oui, mais cela n'explique toujours pas pourquoi il est nécessaire, car le modèle de spécification du pod est défini ci-dessous de toute façon.
user168317