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.selector
to wymagane pole, które określa selektor etykiet dla kapsuł, których dotyczy to wdrożenie.
.spec.selector
musi pasować .spec.template.metadata.labels
lub 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 Deployment
lub przez utworzenie innego kontrolera, takiego jak a ReplicaSet
lub a
ReplicationController
. Jeśli to zrobisz, pierwszy Deployment
myśli, że stworzył te inne strąki. Kubernetes
nie 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.
.spec.template.metadata.labels
? Jaki jest tego sens, jakspec
to zdefiniowano poniżej,Deployment
więc jasne jest, jakie kapsuły są uruchamiane do wdrożenia.