Para que é utilizado o spec - selector - matchLabels durante a criação de uma implantação?

18

Da documentação do Kubernetes :

O campo seletor define como o Deployment encontra quais pods gerenciar.

Mas, ao criar a implantação, já especifiquei o modelo de pod como parte da implantação. Então, por que vou precisar dos seletores também?

Ele deveria ser usado como serviços, onde os pods já estão sendo iniciados separadamente, mas mais tarde colocados sob o guarda-chuva do Deployment para serem gerenciados juntos?

Paddy
fonte

Respostas:

8

Responda a esta pergunta que podemos encontrar na seção Implantações do kubernetes.io

Então, por que vou precisar dos seletores também?

Citações abaixo da documentação para k8s v 1.14

.spec.selectoré um campo obrigatório que especifica um seletor de rótulo para os Pods segmentados por esta implantação.

.spec.selectordeve corresponder .spec.template.metadata.labelsou será rejeitado pela API.

Na versão da API apps / v1, .spec.selector e .metadata.labels não assumem o padrão .spec.template.metadata.labels, se não estiver definido. Portanto, eles devem ser definidos explicitamente . Observe também que .spec.selector é imutável após a criação do Deployment em apps / v1.

Uma Implantação pode encerrar Pods cujos rótulos correspondam ao seletor se o modelo for diferente de .spec.template ou se o número total desses Pods exceder .spec.replicas. Ele exibe novos Pods com .spec.template se o número de Pods for menor que o número desejado.

Os pods já estão sendo iniciados separadamente, mas posteriormente colocados sob a égide do Deployment para serem gerenciados juntos?

Simplesmente falando, não

Nota: Você não deve criar outros pods cujos rótulos correspondam diretamente a esse seletor, criando outro Deploymentou criando outro controlador, como a ReplicaSetou a ReplicationController. Se você fizer isso, o primeiro Deploymentpensa que criou esses outros pods. Kubernetesnão o impede de fazer isso. Se você tiver vários controladores com seletores sobrepostos, os controladores lutarão entre si e não se comportarão corretamente.

alexander.polomodov
fonte
5
Então, para que é usado? Parece que você sempre deve fazer o seletor corresponder aos rótulos das especificações… Existe algum caso em que é útil não fazer isso?
Victor Noël
4
Realmente não responde à pergunta Por quê? - Por que matchLabels existe e deve corresponder .spec.template.metadata.labels? Qual é o objetivo disso, como specé definido de qualquer maneira abaixo, Deploymentpara ficar claro quais Pods foram iniciados para a Implantação.
Ivan
2
Quem se deparar com essa discussão deve verificar a documentação mais recente. Por exemplo, atualmente, .spec.selector não é um campo opcional. É um campo obrigatório. kubernetes.io/docs/concepts/workloads/controllers/deployment
SoftwareTheory
Muito obrigado pelo seu comentário. Eu acho que na nova documentação os autores corrigiram opcional para obrigatório, porque em documentos antigos esse campo foi declarado como opcional, mas na próxima linha os autores acrescentaram que esse campo deve ser definido explicitamente :) Portanto, esse campo também era obrigatório
alexander.polomodov
@SoftwareTheory Sim, mas ainda não explica por que é necessário, pois o modelo de especificação do Pod está definido abaixo de qualquer maneira.
user168317 23/11