J'ai parcouru la page de documentation suivante: https://kubernetes.io / docs / concepts / workloads / controllers / deployment /
L'exemple de déploiement yaml est le suivant:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
Nous pouvons voir ici trois fois où le Le libellé app: nginx
est mentionné.
Pourquoi avons-nous besoin de chacun d'eux? J'ai eu du mal à comprendre la documentation officielle.
3 Réponses :
Première étiquette:
C'est l'étiquette de déploiement qui est utilisée pour sélectionner le déploiement. Vous pouvez utiliser la commande ci-dessous en utilisant la première étiquette:
kubectl get pods -l app=nginx
Deuxième étiquette:
Ce n'est pas une étiquette. C'est un sélecteur d'étiquette pour sélectionner un pod avec des étiquettes nginx. Il est utilisé par ReplicaSet.
Troisième étiquette:
C'est l'étiquette de pod pour identifier les pods. Il est utilisé par ReplicaSet pour maintenir le nombre souhaité de répliques et pour ce sélecteur d'étiquette est utilisé. Il est également utilisé pour sélectionner le pod avec la commande ci-dessous:
kubectl get deployment -l app=nginx
Le premier libellé concerne le déploiement lui-même, il donne un libellé pour ce déploiement particulier. Supposons que vous souhaitiez supprimer ce déploiement, puis exécutez la commande suivante:
apiVersion: v1 kind: Service metadata: name: nginx spec: type: LoadBalancer ports: - port: 80 selector: app: nginx
Cela supprimera tout le déploiement.
Le deuxième libellé est selector: matchLabels
qui indique aux ressources (service, etc.) de faire correspondre le pod en fonction de l'étiquette. Donc, disons si vous voulez créer le service qui a tous les pods ayant des étiquettes de app = nginx
alors vous fournissez la définition suivante:
kubectl delete deployment -l app=nginx
Le le service ci-dessus recherchera les matchLabels et les pods de liaison auxquels le libellé app: nginx
leur est attribué
Le troisième libellé est podTemplate code> labels, le
template
est en fait podTemplate
. Il décrit le pod sur lequel il est lancé. Supposons donc que vous ayez deux déploiements de répliques et que k8 lancera 2 pods avec l'étiquette spécifiée dans template: metadata: labels
. Il s'agit d'une différence subtile mais importante, vous pouvez donc avoir les différents libellés pour le déploiement et les pods générés par ce déploiement.
Je suppose alors que le second est requis et les deux autres sont facultatifs?
.metadata.labels
sert à étiqueter l'objet déploiement
lui-même, vous n'en avez pas nécessairement besoin, mais comme l'ont dit d'autres réponses, cela vous aide à organiser les objets.
/ p>
.spec.selector
indique au déploiement
(sous le capot, c'est l'objet ReplicaSet
) comment trouver les pods à gérer. Pour votre exemple, il gérera les pods avec l'étiquette app: nginx
.
Mais comment dire au contrôleur ReplicaSet de créer des pods avec cette étiquette en premier lieu? Vous définissez cela dans le modèle de pod, .spec.template.metadata.labels
.