ReplicaSets are a k8s construct for maintaining a number of Pods replicas at all times. They are the successor of the ReplicationController construct and are a lower-level concept than a Deployment.

Note

It’s generally advised against using them directly.

They use label selectors1 to acquire pods for management and ownerReference fields 2 for garbage collection3 and to prevent other controllers from trying to manage its pods (dependants). Furthermore, they use pod templates4 to create new pods from.

Important

Unlike a Deployment, RSs don’t provide declarative updates to pods with revision control.

Warning

ReplicaSets can acquire pods with a different .spec as long as their labels match its selector. They don’t evaluate whether their template matches the “to-be-acquired” pod’s .spec.

Note

Pods with matching labels, but with an ownerReference that is a controller5 will not be acquired by the ReplicaSet. If, however, the pod lacks an owner reference or the reference is not a controller, the RS with a matching selector will acquire the pod immediately.

Sources

Footnotes

  1. See Labels and Label Selectors in k8s.

  2. See Owners and Dependents in k8s.

  3. See Garbage Collection in k8s.

  4. See Pod Templates.

  5. See k8s controllers.