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
3 Réponses :
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.
Il existe trois objets différents créés avec le manifeste de déploiement.
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.
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`