Kubernetes 控制器 - ReplicaSet
Table of Contents
ReplicaSet(后面简称RS) 是为了维护一组 Pod 副本的运行,作用就是保证这些 Pod 在集群中正常运行。
1. 工作原理
RS 使用字段定义,主要包括:
- 选择器(selector):来识别它可以获取的 Pods
- 副本数量(replica):表示维护的 Pod 数量
- Pod 模板(template):表示创建 Pod 时所需要的信息
RS 通过创建、删除 Pod 的方式来达到副本的期望(desired)数量,当它需要创建新的 Pod 时,会使用上面的 Pod 模板。
RS 使用 Pod 的 metadata.ownerReferences
字段来与 Pod 之间建立连接(Pod 和 RS 的从属关系),指定当前对象所拥有的资源。
使用 RS 创建的 Pods 都在 metadata.ownerReferences
中添加的自己的标识信息。
RS 通过选择器来标识新的 Pods。如果一个 Pod 没有 OwnerReferences
或者 OwnerReference
不是 Controller,并且和
RS 的选择器相匹配,那么 RS 会立即获取它。
2. 何时使用
Deployment 相比 RS 是更高级的抽象来管理 ReplicaSets 和提供声明式的更新和其它有用的功能。因为,建议使用 Deployments 而不直接使用 ReplicaSets,除非你需要自定义更新编排或者完全不需要更新。
也就是说你永远不需要直接操作 RS 对象,而是通过修改 Deployment 中的 spec
部分来定义你的应用程序。
注意:
你可以直接创建 Pod,但是建议创建 Pod 时确保标签不要与已存在的 ReplicaSets 标签相同,否则会被 RS 获取到,然后被终止 (因为 Pod 数量超过了 RS 所要求的数量)。
如果你是先创建 Pod,然后创建 RS,那么 RS 会把该 Pod 作为 RS 的一部分,自己创建的 Pod 的数量将比实际的要少一个。