4
votes

K8s - Signification de la section Spec.Template.metadata

Quelle est l'importance d'avoir cette section - spec.template.metadata ? Cela ne semble pas obligatoire. Cependant j'aimerais savoir où ce serait très utile! Sinon, quel est l’intérêt de répéter tous les sélecteurs?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello
spec:
  selector:
    matchLabels:
      app: hello
      tier: backend
      track: stable
  replicas: 7
  template:
    metadata:
      labels:
        app: hello
        tier: backend
        track: stable
    spec:
      containers:
        - name: hello
          image: "gcr.io/google-samples/hello-go-gke:1.0"
          ports:
            - name: http
              containerPort: 80


0 commentaires

3 Réponses :


2
votes

Cela devient les métadonnées sur les pods qui seront éventuellement créés. En général, cela ressemble beaucoup aux métadonnées du déploiement lui-même, mais ce n'est pas obligatoire.


0 commentaires

2
votes

Il existe trois objets différents créés avec le manifeste de déploiement.

  1. Déploiement
  2. ReplicaSet
  3. Pod

Dans votre question, Spec. Modèle. Les métadonnées font référence à l'objet ReplicaSet. Il est recommandé de définir ces paramètres pour identifier de manière unique chaque objet ou les objets pertinents pour un déploiement spécifique.


0 commentaires

3
votes

Qu'est-ce qui vous fait penser que ce n'est pas nécessaire?

Si vous ne fournissez pas les métadonnées pour un modèle de déploiement, il échouera avec un message comme celui-ci:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      run: nginx
  strategy: {}
  template:
    metadata:
      labels:
        run: nginxv1
    spec:
      containers:
      - image: nginx
        name: nginx

Ou si les métadonnées ne correspondent pas au sélecteur, échouera avec un message comme celui-ci:

error validating "STDIN": error validating data: ValidationError(Deployment.spec): 
missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; 
if you choose to ignore these errors, turn validation off with --validate=false

Aussi, si vous ne fournissez pas le selector il y aura une erreur avec un message comme celui-ci:

The Deployment "nginx" is invalid: spec.template.metadata.labels: 
Invalid value: map[string]string{"run":"nginxv1"}: `selector` does not match template `labels`

Le yaml utilisé est le ci-dessous:

The Deployment "nginx" is invalid: spec.template.metadata.labels: 
Invalid value: map[string]string(nil): `selector` does not match template `lab
els`


0 commentaires