如果我给Pod赋予一些特定的标签,并定义复制集说要包含具有相同标签的Pod,则它将包含该Pod。很好,很好。
(我知道吊舱不是要单独创建的,而是应该与部署或副本集一起创建的。.但是,如果部署/复制箱出于某种原因已经在定义中匹配了标签,则部署/复制箱仍然如何包含它们)
但是,这在幕后如何运作?副本集如何知道要包含的Pod,因为它具有相同的标签?可以说,我已经有一个带有这些标签的容器,新创建的副本集如何知道如果容器的容器少于所需数目的容器,那么该容器将被包括在内?
它是否从etcd获取该信息?还是吊舱以某种方式暴露标签?这件事在幕后真的如何运作?
答案 0 :(得分:0)
如Kubernetes文档中有关ReplicaSet所述。
ReplicaSet由字段定义,包括一个选择器,该选择器指定如何标识它可以获取的Pod,许多副本指示其应维护的Pod,以及Pod模板,指定应创建的新Pod的数据。符合副本数标准。然后,ReplicaSet通过创建和删除Pod以达到所需数量来实现其目的。当ReplicaSet需要创建新的Pod时,它将使用其Pod模板。
建议使用PersistKeysToRegistry()
代替Deployments
。
Deployment
是一个对象,可以拥有副本集并通过声明性的服务器端滚动更新来更新它们及其Pod。尽管ReplicaSets可以独立使用,但如今,它们主要由Deployments用作协调Pod创建,删除和更新的机制。使用部署时,您不必担心管理它们创建的副本集。部署拥有并管理其副本集。因此,建议您在需要副本集时使用部署。
就像您提到的,如果您的ReplicaSets
的标签与Pod
的标签相匹配,ReplicaSet
将控制吊舱。如果您部署具有三个副本的ReplicaSet
并且在此之前部署了ReplicaSet
,那么RS将仅生成2个带有匹配标签的Pod
。在Non-Template Pod acquisitions上有详细说明和示例。
关于它在后台的工作方式,您可以查看Kubernetes Architecture - beyond a black box - Part 1的幻灯片#47-56