副本集 (RS, Replica Set) 被认为 是 “升级版” 的 RC。

RS 也是用于保证与 label selector 匹配的 pod 数量维持在期望状态。副本集对象一般不单独使用,而是作为 Deployment 的理想状态参数使用。

在新版本的 Kubernetes 中建议使用 ReplicaSet 来取代 ReplicationController。ReplicaSet 跟 ReplicationController 没有本质的不同,只是名字不一样,并且 ReplicaSet 支持集合式的 selector。

虽然 ReplicaSet 可以独立使用,但一般还是建议使用 Deployment 来自动管理 ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如 ReplicaSet 不支持 rolling-update 但 Deployment 支持)。

RS 与 RC 的区别

RC 只支持基于等式的 selector(env=dev 或 environment!=qa),但 RS 还支持新的,基于集合的 selector(version in (v1.0, v2.0)或 env notin (dev, qa)),这对复杂的运维管理很方便。

升级方式

  • RS 不能使用 kubectlrolling-update 进行升级
  • kubectl rolling-update 专用于 rc
  • RS 升级使用 deployment 或者 kubectl replace 命令

社区引入这一 API 的初衷是用于取代 vl 中的 RC,也就是说当 v1 版本被废弃时,RC 就完成了它的历史使命,而由 RS 来接管其工作。

yaml 示例

  1. apiVersion: extensions/v1beta1
  2. kind: ReplicaSet
  3. metadata:
  4. name: lykops-rs
  5. labels:
  6. software: apache
  7. project: lykops
  8. app: lykops-rs
  9. version: v1
  10. spec:
  11. replicas: 2
  12. selector:
  13. matchLabels:
  14. name: lykops-rs
  15. software: apache
  16. project: lykops
  17. app: lykops-rs
  18. version: v1
  19. template:
  20. metadata:
  21. labels:
  22. name: lykops-rs
  23. software: apache
  24. project: lykops
  25. app: lykops-rs
  26. version: v1
  27. spec:
  28. containers:
  29. - name: lykops-rs
  30. image: web:apache
  31. command: ["sh", "/etc/run.sh"]
  32. ports:
  33. - containerPort: 80
  34. name: http