如果我给pod提供一些特定的标签并定义replicaset说包含具有相同标签的pod,则它包含该pod。这一切都很好,很好..
(我知道pod不是单独创建的,但是应该使用部署或复制来创建..但仍然如何部署/复制包含其标签在定义中匹配的pod,如果它们因某种原因已经存在)
但是,这是如何在幕后工作的? replicaset如何知道要包含pod,因为它具有相同的标签?可以说,我已经有了一个带有这些标签的pod,如果pod的容量小于所需的pod数,那么新创建的副本集如何知道要包含pod?
它是否从etcd获得该信息?或者pod以某种方式暴露标签?这个东西如何在幕后工作?
正如Kubernetes关于ReplicaSet的文档中所述。
ReplicaSet是使用字段定义的,包括指定如何识别它可以获取的Pod的选择器,指示它应该维护多少Pod的多个副本,以及一个pod模板,用于指定它应该创建的新Pod的数据以满足该数量复制品标准。然后,ReplicaSet通过根据需要创建和删除Pod来达到其目的,以达到所需的数量。当ReplicaSet需要创建新Pod时,它使用其Pod模板。
建议使用Deployments
而不是ReplicaSets
。
Deployment
是一个对象,它可以拥有ReplicaSet并通过声明性的服务器端滚动更新来更新它们和它们的Pod。虽然ReplicaSet可以独立使用,但今天它们主要被Deployments用作协调Pod创建,删除和更新的机制。使用“部署”时,您不必担心管理它们创建的副本集。部署拥有并管理其ReplicaSet。因此,建议您在需要ReplicaSet时使用“部署”。
就像你提到的,如果你有一个Pod
标签与ReplicaSet
标签匹配,ReplicaSet
将控制pod。如果你部署ReplicaSet
有3个副本并且之前部署了Pod
,那么RS将只生成带有匹配标签的2个Pods
。有关Non-Template Pod acquisitions的详细信息和示例进行了解释。
至于它如何在幕后工作,你可以看看Kubernetes Architecture - beyond a black box - Part 1的#47-56幻灯片