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.selector
est un champ obligatoire qui spécifie un sélecteur d'étiquette pour les pods ciblés par ce déploiement.
.spec.selector
doit 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 ReplicaSet
ou a
ReplicationController
. Si vous le faites, le premier Deployment
pense qu'il a créé ces autres pods. Kubernetes
ne 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.
.spec.template.metadata.labels
? Quel est son intérêt, comme celaspec
est défini de toute façon ci-dessousDeployment
, il est donc clair quels pods sont démarrés pour le déploiement.