Antworten auf diese Frage finden Sie im Abschnitt Deployments von kubernetes.io
Warum brauche ich dann auch die Selektoren?
Zitate aus der Dokumentation für k8s v 1.14
.spec.selector
ist ein erforderliches Feld, das eine Beschriftungsauswahl für die Pods angibt, auf die sich diese Bereitstellung bezieht.
.spec.selector
muss übereinstimmen .spec.template.metadata.labels
, sonst wird es von der API abgelehnt.
In der API-Version von apps / v1 sind .spec.selector und .metadata.labels nicht standardmäßig .spec.template.metadata.labels, wenn sie nicht festgelegt sind. Sie müssen also explizit gesetzt werden . Beachten Sie auch, dass .spec.selector nach dem Erstellen der Bereitstellung in apps / v1 unveränderlich ist.
Eine Bereitstellung kann Pods beenden, deren Beschriftungen mit der Auswahl übereinstimmen, wenn sich ihre Vorlage von ".spec.template" unterscheidet oder wenn die Gesamtanzahl solcher Pods ".spec.replicas" überschreitet. Es werden neue Pods mit der Erweiterung .spec.template angezeigt, wenn die Anzahl der Pods unter der gewünschten Anzahl liegt.
Pods werden bereits separat gestartet, aber später unter dem Dach des Deployments zusammengeführt, um gemeinsam verwaltet zu werden?
Einfach gesagt, nein
Hinweis: Sie sollten keine anderen Pods erstellen, deren Beschriftungen direkt mit diesem Selektor übereinstimmen, indem Sie einen anderen Deployment
oder einen anderen Controller wie a ReplicaSet
oder a
erstellen ReplicationController
. Wenn Sie dies tun, Deployment
denkt der erste, dass diese anderen Pods erstellt wurden. Kubernetes
hindert Sie nicht daran, dies zu tun. Wenn Sie mehrere Controller mit überlappenden Selektoren haben, kämpfen die Controller miteinander und verhalten sich nicht richtig.
.spec.template.metadata.labels
? Worauf kommt es an, wiespec
im Folgenden ohnehin definiert,Deployment
damit klar ist, welche Pods für die Bereitstellung gestartet werden.