一. 什么是控制器
Kubernetes中内建了很多controller(控制器)。这些相当3一个状态机,用来控制Pod的具体状态和行为
二. 控制器类型
1. ReplicationController和ReplicaSet
2. Deployment
3. DaemonSet
4. StateFulSet
5. Job/cronJob
6. Horizontal Pod Autoscaling
三. ReplicationController和ReplicaSet
Replicationcontroller (RC)用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代:而如果异常多出来的容器也会自动回收:
在新版本的Kubernetes中建议使用Replicaset来取代ReplicationController. Replicaset跟ReplicationController没有本质的不同,只是名字不一样,并且Replicaset支持集合式的selector。
四. Deployment(和RS,RC连用,适用于一般服务)
Deployment为Pod和Replicaset提供了一个声明式定义declarative)方法,用来替代以前的ReplicationController来方便的管理应用。典型的应用场景包括:
1. 定义Deployment来创建Pod和Replicaset
2. 滚动升级和回滚应用 3. 扩容和缩容
4. 暂停和继续Deployment
五. DaemonSet(适用于需要以node为节点的守护进程)
DoernonSet确保全部(或者一些) Node上运行一个Pod的副本,当有Node加入集群时,也会为他们新增一个Pod,当有Node从集群移除时,这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod使用DaemonSet的一些典型用法:
1. 运行集群存储daemon,例如在每个Node上运行glusterd、ceph 2. 在每个Node上运行日志收集daemon.例如fluentd、logstash
3. 在每个Node上运行监控daemon,例如Prometheus Node Exporter,collectd、Datadog代理、NewRelic代理,或Ganglia gmond
六. Job and CronJob(适用于批处理)
七. StatefulSet (适用于有状态服务)
StatefulSet作为Controller为Pod提供唯-的标识。 它可以保证部署和scale的顺序
StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),其应用场景包括:
1. 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据, 基于PVC来实现
2. 稳定的网络标志,即Pod重新调度后其PodName和HostName不变, 基于Headless Service (即没有Cluster IP的Service)来实现
3. 有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到
N-1,在下一一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现
4. 有序收缩,有序删除(即从N-1到0)
八. Horizontal Pod Autoscaling(HPA)
他实际上是控制器的附属品,可以实现自动扩展,以性能指标为标准。