Do czego służy spec - selector - matchLabels podczas tworzenia obrazu stanowiska?

18

Z dokumentacji Kubernetes :

Pole wyboru określa, w jaki sposób wdrożenie znajdzie, którymi zasobami zarządzać.

Ale podczas tworzenia wdrożenia już określam szablon kapsuły jako część wdrożenia. Dlaczego więc potrzebuję również selektorów?

Czy powinien być używany jako usługi, w których strąki są już uruchamiane osobno, ale później są objęte parasolem wdrażania i są zarządzane razem?

Paddy
źródło

Odpowiedzi:

8

Odpowiedź na to pytanie znajduje się w dziale Wdrożenia z kubernetes.io

Dlaczego więc potrzebuję również selektorów?

Cytaty poniżej z dokumentacji dla K8s v 1.14

.spec.selectorto wymagane pole, które określa selektor etykiet dla kapsuł, których dotyczy to wdrożenie.

.spec.selectormusi pasować .spec.template.metadata.labelslub zostanie odrzucony przez API.

W wersji API aplikacje / v1, .spec.selector i .metadata.labels nie są domyślnie ustawione na .spec.template.metadata.labels, jeśli nie są ustawione. Dlatego muszą być ustawione jawnie . Należy również pamiętać, że plik .spec.selector jest niezmienny po utworzeniu obrazu stanowiska w aplikacji / v1.

Wdrożenie może zakończyć strąki, których etykiety pasują do selektora, jeśli ich szablon jest inny niż .spec.template lub jeśli całkowita liczba takich strąków przekracza .spec.replicas. Wywołuje nowe Kapsuły z .spec.template, jeśli liczba Kapsułek jest mniejsza niż pożądana liczba.

Strąki są już uruchamiane osobno, ale później wprowadzono je pod parasol wdrożenia, aby wspólnie nimi zarządzać?

Mówiąc wprost, nie

Uwaga: Nie należy tworzyć innych strąków, których etykiety pasują do tego selektora, bezpośrednio, przez utworzenie innego Deploymentlub przez utworzenie innego kontrolera, takiego jak a ReplicaSetlub a ReplicationController. Jeśli to zrobisz, pierwszy Deploymentmyśli, że stworzył te inne strąki. Kubernetesnie powstrzymuje cię przed zrobieniem tego. Jeśli masz wiele kontrolerów z nakładającymi się selektorami, kontrolery będą ze sobą walczyć i nie będą się zachowywać poprawnie.

alexander.polomodov
źródło
5
Więc do czego służy? Wygląda na to, że zawsze powinieneś dopasowywać selektor do etykiet specyfikacji… Czy jest jakiś przypadek, w którym warto tego nie robić?
Victor Noël,
4
Naprawdę nie odpowiada na pytanie Dlaczego? - Dlaczego istnieje matchLabels i musi on pasować .spec.template.metadata.labels? Jaki jest tego sens, jak specto zdefiniowano poniżej, Deploymentwięc jasne jest, jakie kapsuły są uruchamiane do wdrożenia.
Ivan
2
Każdy, kto wpadnie na tę dyskusję, powinien sprawdzić najnowszą dokumentację. Na przykład obecnie .spec.selector nie jest polem opcjonalnym. To pole jest wymagane. kubernetes.io/docs/concepts/workloads/controllers/deployment
SoftwareTheory
Wielkie dzięki za komentarz. Myślę, że w nowej dokumentacji autorzy poprawili opcjonalne na wymagane, ponieważ w starych dokumentach to pole było powiedziane jako opcjonalne, ale w kolejnej linii autorzy dodali, że to pole musi być jawnie ustawione :) Tak skutecznie to pole również było wymagane
alexander.polomodov
@ SoftwareTheory Tak, ale nadal nie wyjaśnia, dlaczego jest to wymagane, ponieważ szablon specyfikacji Pod został zdefiniowany poniżej.
user168317,