¿Para qué se usa spec - selector - matchLabels al crear una implementación?

18

De la documentación de Kubernetes :

El campo selector define cómo la implementación encuentra qué pods administrar.

Pero, al crear la implementación, ya especifico la plantilla de pod como parte de la implementación. Entonces, ¿por qué necesitaré también los selectores?

¿Se supone que se debe usar como servicios, donde los pods ya se están iniciando por separado, pero luego se han puesto bajo el paraguas de Deployment para ser administrados juntos?

Arrozal
fuente

Respuestas:

8

La respuesta a esta pregunta la podemos encontrar en la sección Implementaciones de kubernetes.io

Entonces, ¿por qué necesitaré también los selectores?

Citas a continuación de la documentación para k8s v 1.14

.spec.selectores un campo obligatorio que especifica un selector de etiquetas para los Pods a los que se dirige esta implementación.

.spec.selectordebe coincidir .spec.template.metadata.labels, o será rechazado por la API.

En la versión de API apps / v1, .spec.selector y .metadata.labels no tienen el valor predeterminado .spec.template.metadata.labels si no se configuran. Por lo tanto, deben establecerse explícitamente . También tenga en cuenta que .spec.selector es inmutable después de la creación de la implementación en apps / v1.

Una implementación puede finalizar Pods cuyas etiquetas coincidan con el selector si su plantilla es diferente de .spec.template o si el número total de dichos Pods supera las réplicas .spec. Muestra nuevos Pods con .spec.template si el número de Pods es menor que el número deseado.

¿Los pods ya se están iniciando por separado, pero luego se han puesto bajo el paraguas de Deployment para ser administrados juntos?

Simplemente hablando, no

Nota: No debe crear otros pods cuyas etiquetas coincidan con este selector, ya sea directamente, creando otro Deploymento creando otro controlador como a ReplicaSeto a ReplicationController. Si lo hace, el primero Deploymentpiensa que creó estas otras vainas. Kubernetesno te impide hacer esto. Si tiene varios controladores que tienen selectores superpuestos, los controladores lucharán entre sí y no se comportarán correctamente.

alexander.polomodov
fuente
55
Entonces, ¿para qué se utiliza? Parece que siempre debe hacer que el selector coincida con las etiquetas de la especificación ... ¿Hay algún caso en el que sea útil no hacerlo?
Victor Noël
44
Realmente no responde la pregunta ¿Por qué? - ¿Por qué existen matchLabels y deben coincidir .spec.template.metadata.labels? Cuál es el punto, como specse define a continuación, de Deploymentmodo que está claro qué pods se inician para la implementación.
Ivan
2
Cualquiera que se encuentre con esta discusión debe consultar la documentación más reciente. Por ejemplo, actualmente, .spec.selector no es un campo opcional. Es un campo obligatorio. kubernetes.io/docs/concepts/workloads/controllers/deployment
SoftwareTheory
Muchas gracias por tu comentario. Creo que en la nueva documentación los autores han corregido opcional a obligatorio, porque en documentos antiguos este campo se decía como opcional pero en la línea siguiente los autores agregaron que este campo debe establecerse explícitamente :) Así que efectivamente este campo también era obligatorio
alexander.polomodov
@SoftwareTheory Sí, pero aún no explica por qué es necesario, ya que la plantilla de especificaciones de Pod se define a continuación de todos modos.
user168317