2.3 K8s控制器资源对象之概述
二、控制器资源对象
Pod控制器:用于管理pod,将pod的状态调整为用户所期望的状态
- ReplicationController:简称rc,已废弃,不再推荐使用
- ReplicaSet:新一代的RC,核心作用:保证Pod副本数量为用户期望状态、支持扩缩容机制。不建议直接使用,它会被deployment调用。主要由如下三个组件定义
- 用户期望副本数:replicas
- 标签选择器:selector
- pod资源模板:template[.metadate|.spec]
- Deployment:工作在ReplicaSet之上,通过控制ReplicaSet来控制Pod;支持扩缩容、滚动更新、回滚、支持更新策略、提供声明式配置功能(支持动态修改)。特点:管理无状态应用+应用是持续运行的pod

结合上图我们可以知道:一个Deployment可以管理多个RS(默认管理10个RS),但是最终生效的只有一个。例如v2版本的RS生效后,v1的RS就失效了,但是不会删除,一旦要回滚的时候,直接立即将Deployment指向v1的RS,实现快速回滚,无需重新创建资源清单。
- DaemonSet:用于确保集群中的每一个Node+Master节点(准确说是满足调度条件的所有节点)或集群中满足条件的部分节点上只运行一个特定的Pod副本(如果pod不能容忍Master的污点,Master是不能运行Pod的);新增节点时,新节点上会自动运行一个该Pod;特点:管理无状态应用+应用是持续运行的pod;主要需要如下定义:
- 标签选择器:selector,用于确保节点上的Pod副本数始终为1个/节点,总副本数跟节点数量有关。
- pod资源模板:template
- nodeName、nodeSelector、node污点:用来选择集群中满足条件的部分节点,缺省为集群的每一个节点
- Job:完成任务后pod退出,否则重启;job只能执行一次作业,如果是周期任务,使用Cronjob。特点:应用pod无需持续运行
- Cronjob:周期性运行任务,完成后Pod退出,否则重建;特点:应用pod无需持续运行
- StatefulSet:管理有状态的Pod,例如MySQL、Redis
- HPA(Horizontal Pod Autoscaling)