在 Kubernetes 中内置了很多 controller(控制器),这些相当于一个状态机,用来控制pod的具体状态和行为。
控制器类型如:ReplicationController/ReplicaSet、Deployment、StatefulSet、DaemonSet、Job/CronJob、HorizontalPodAutoscaler等。
1、Deployment
Replication Controller(RC)主要功能:确保Pod数量、确保Pod健康、弹性伸缩、滚动升级。
Replication Set(RS)(升级版的RC):RC 只支持基于等式的 selector (env=dev或environment!=qa),但 RS 还支持基于集合的 selector (version in (v1.0,v2.0))。
Deployment 为Pod 和ReplicaSet提供了声明式定义,用ReplicaSet来代替以前的ReplicationController来方便的管理应用,ReplicaSet跟ReplicationController没有本质的不同,只是名字不一样,但ReplicaSet支持集合式selector。Deployment 支持功能:
1、定义 Deployment 来创建Pod的ReplicaSet(Pod数量)
2、滚动升级和回滚应用
3、扩容和缩容
4、暂停和继续Deployment
2、StatefulSet
StatefulSet 是为了解决有状态服务的问题,应用场景包括以下几个方面:
1、稳定的持久化部署:Pod重新调度后,能访问到相同的持久化数据,基于PVC来进行实现。
2、稳定的网络标志:Pod重新调度后其PodName、HostName是不变的,基于Headless Service(没有Cluster IP的Service)来实现。
3、有序部署、有序扩展:Pod是有顺序的,在部署或扩展的时候要根据定义的顺序一次执行(从0-N,在下一个Pod运行之前,所有的之前的Pod必须都是Running和Ready的状态),基于init containers 来实现。
4、有序收缩,有序删除:从N-->0进行。
3、DaemonSet
DaemonSet 是确保全部(或者一些)Node 上运行有且仅有一个Pod的副本,当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些对应的Pod也会回收。删除 DaemonSet 将会删除它创建的所有Pod。
使用DaemonSet 的一些场景:
1、在每个Node上运行集群存储daemon,例如:glusterd、ceph。
2、在每个Node上运行日志收集daemon,例如:fluentd、filebeat、logstash。
3、在每个Node上运行监控daemon,例如:Promethues node exporter。
4、Job/Cron Job
Job 负责批处理任务:
仅执行一次的任务,它保证批处理任务的一个或者多个Pod成功结束(可以按照成功数量执行多次)。
Cron Job管理基于时间的Job:
1、在给定的时间点运行一次。
2、周期性的在给定时间点进行运行。
5、HorizontalPodAutoscaler(HPA、自动扩缩容)
HorizontalPodAutoscaler 依赖于RC、RS、Deployment 控制器之上,根据当前的使用情况进行自动的调整 Pod的副本数量。