创建展开时使用的规范-选择器-matchLabel是什么?


18

Kubernetes文档中

选择器字段定义了部署如何查找要管理的Pod。

但是,在创建部署时,我已经将Pod模板指定为部署的一部分。那么,为什么还要选择器呢?

它是否应该像服务一样使用,在这些服务中,pod已经单独启动,但是后来被带到Deployment的保护之下,可以一起进行管理?

Answers:


8

我们可以在kubernetes.io的“ 部署”部分中找到此问题的答案。

那么,为什么还要选择器呢?

以下是k8s v 1.14的文档引文

.spec.selector必填字段,用于为此部署目标的Pod指定标签选择器。

.spec.selector必须匹配.spec.template.metadata.labels,否则将被API拒绝。

在API版本apps / v1中,.spec.selector和.metadata.labels如果未设置,则默认不为.spec.template.metadata.labels。因此,必须明确设置它们。还要注意,在apps / v1中创建Deployment后,.spec.selector是不可变的。

如果部署的模板与.spec.template不同,或者其总数超过.spec.replicas,则Deployment可以终止其标签与选择器匹配的Pod。如果Pods的数量少于所需的数量,它将使用.spec.template弹出新的Pod。

吊舱已经单独启动,但后来归入“部署”伞下,以便一起管理?

简而言之,

注意:不应直接通过创建另一个Deployment或通过创建另一个控制器(例如a ReplicaSet或a) 来创建其标签与该选择器匹配的其他容器ReplicationController。如果这样做,第一个Deployment认为它创建了这些其他吊舱。Kubernetes并不能阻止您这样做。如果您有多个具有重叠选择器的控制器,则这些控制器将相互竞争,并且无法正常运行。


5
那么它是用来干什么的呢?看来您应该始终使选择器与规范的标签匹配……在某些情况下,这样做不有用吗?
维克多·诺埃尔

4
真的不回答为什么吗?-为什么matchLabel存在并且必须匹配.spec.template.metadata.labels?它的意义是什么,正如spec下面定义的那样,Deployment因此很清楚为部署启动了哪些Pod。
伊万

2
参与此讨论的任何人都应查看最新文档。例如,当前,.spec.selector不是可选字段。这是必填字段。kubernetes.io/docs/concepts/workloads/controllers/deployment
SoftwareTheory,

非常感谢您的评论。我认为在新文档中,作者已将可选字段改成必填字段,因为在旧文档中此字段被告知是可选字段,但在下一行中,作者补充说,必须显式设置此字段:)因此,实际上也需要此字段
alexander.polomodov

@SoftwareTheory是的,但是仍然没有解释为什么需要它,因为Pod规范模板始终在下面定义。
user168317 '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.