La etiqueta de implementación (etiquetas) coincide con el conocimiento: spec.selector.matchLables y spec.template.metadata.lables

1. Experimento Spec.selector.matchLables

1.1 La forma correcta de escribir Deployment es hacer que el valor de spec.selector.matchLabels coincida exactamente con el valor de spec.template.metadata.lables para que no se informe ningún error.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      app: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80

Pod creado correctamente

# kubectl get pods

NAME                      READY   STATUS    RESTARTS   AGE
my-nginx-9b44d8f5-d6n8z   1/1     Running   0          3s
my-nginx-9b44d8f5-zzv52   1/1     Running   0          3s

1.2 Si no escribe el contenido del campo spec.selector.matchLabels, si lo crea directamente, se informará un error: falta el selector de campo necesario

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
# kubectl create -f test_pod_svc.yaml

error: error validating "test_pod_svc.yaml": 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

1.3 Cuando el valor de la clave que coincide con spec.selector.matchLabels no se corresponde con el valor de la clave de spec.template.metadata.lables, se informará un error directamente: la etiqueta seleccionada y la plantilla no coinciden

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      app: my-nginx-add
  replicas: 2
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx:1.14
        ports:
        - containerPort: 80
# kubectl create -f test_pod_svc.yaml

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

1.4 Ver el manual de ayuda

# kubectl explain Deployment.spec 

selector  <Object>
Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.

pod的标签选择器。 由此选择其pod的现有ReplicaSet(副本集)将受此部署影响的副本。

2. Resumen

  • Spec.selector.matchLabels debe estar escrito en deployment.yaml

  • Al definir una plantilla de pod, debe definir spec.template.metadata.lables, porque spec.selector.matchLabels es un campo obligatorio y debe ser coherente con el valor clave de spec.template.metadata.lables.

  • El contenido definido en spec.template.metadata.lables se aplicará a todas las copias de pod definidas en spec.template.spec. Las etiquetas no se pueden definir en spec.template.spec.containers


3. Artículos de referencia

https://cloud.tencent.com/developer/article/1394657

Supongo que te gusta

Origin blog.csdn.net/yjk13703623757/article/details/106088059
Recomendado
Clasificación