A cosa serve spec - selector - matchLabels durante la creazione di una distribuzione?


18

Dalla documentazione di Kubernetes :

Il campo selettore definisce come la distribuzione trova i pod da gestire.

Ma, durante la creazione della distribuzione, ho già specificato il modello di pod come parte della distribuzione. Quindi, perché avrò bisogno anche dei selettori?

Dovrebbe essere usato come un servizio, dove i pod sono già stati avviati separatamente, ma successivamente portati sotto l'ombrello della distribuzione per essere gestiti insieme?

Risposte:


8

Risposta per questa domanda che possiamo trovare nella sezione Distribuzioni da kubernetes.io

Quindi, perché avrò bisogno anche dei selettori?

Citazioni di seguito dalla documentazione per k8s v 1.14

.spec.selectorè un campo obbligatorio che specifica un selettore di etichette per i pod target di questa distribuzione.

.spec.selectordeve corrispondere .spec.template.metadata.labelso verrà rifiutato dall'API.

Nella versione API apps / v1, .spec.selector e .metadata.labels non impostano automaticamente su .spec.template.metadata.labels se non impostati. Quindi devono essere impostati esplicitamente . Si noti inoltre che .spec.selector è immutabile dopo la creazione della distribuzione in app / v1.

Una distribuzione può terminare i pod le cui etichette corrispondono al selettore se il loro modello è diverso da .spec.template o se il numero totale di tali pod supera .spec.replicas. Visualizza nuovi pod con .spec.template se il numero di pod è inferiore al numero desiderato.

I pod sono già stati avviati separatamente, ma successivamente portati sotto l'egida della distribuzione per essere gestiti insieme?

In parole semplici, no

Nota: non è necessario creare altri pod le cui etichette corrispondono a questo selettore, sia direttamente, creandone un altro Deployment, sia creando un altro controller come a ReplicaSeto a ReplicationController. Se lo fai, il primo Deploymentpensa che abbia creato questi altri pod. Kubernetesnon ti impedisce di farlo. Se disponi di più controller con selettori sovrapposti, i controller combatteranno tra loro e non si comporteranno correttamente.


5
Quindi a cosa serve? Sembra che dovresti sempre fare in modo che il selettore corrisponda alle etichette delle specifiche ... C'è qualche caso in cui è utile non farlo?
Victor Noël,

4
Non risponde davvero alla domanda Perché? - Perché matchLabels esiste e deve corrispondere .spec.template.metadata.labels? Qual è il punto, come specè definito di seguito, Deploymentquindi è chiaro quali Pod sono stati avviati per la distribuzione.
Ivan

2
Chiunque entri in questa discussione dovrebbe controllare la documentazione più recente. Ad esempio, attualmente .spec.selector non è un campo opzionale. È un campo obbligatorio kubernetes.io/docs/concepts/workloads/controllers/deployment
SoftwareTheory

Grazie mille per il tuo commento. Penso che nella nuova documentazione gli autori abbiano corretto l'opzione facoltativa, poiché nei vecchi documenti questo campo era indicato come facoltativo, ma nella riga successiva gli autori hanno aggiunto che questo campo deve essere impostato in modo esplicito :) Così efficacemente è stato richiesto anche questo campo
alexander.polomodov

@SoftwareTheory Sì, ma non spiega ancora perché è necessario, poiché il modello di specifiche Pod è comunque definito di seguito.
user168317
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.