在k8s中controllers控制器也叫工作负载,常见的五种工作负载如下:
一、常见控制器
1、工作负载-ReplicaSet(副本控制器)
- ReplicaSet用于解决pod的扩容和缩容问题。
- 通常用于无状态应用
2、工作负载-Deployment
Kubernetes Deployment提供了官方的用于更新Pod和Replica Set(下一代的ReplicationController)的方法,您可以在Deployment对象中只描述您所期望的理想状态(预期的运行状态),Deployment控制器为您将现在的实际状态转换成您期望的状态;
Deployment集成了上线部署、滚动升级、创建副本、暂停上线任务,恢复上线任务,回滚到以前某一版本(成功/稳定)Deployment等功能,在某种程度上, Deployment可以帮我们实现无人值守的上线,大大降低我们的上线过程的复杂沟通、操作风险。
Deployment的典型用例:
使用Deployment来启动(上线/部署)一个Pod或者ReplicaSet
检查一个Deployment是否成功执行
更新Deployment来重新创建相应的Pods(例如,需要使用一个新的Image)
如果现有的Deployment不稳定,那么回滚到一个早期的稳定的Deployment版本
3、工作负载-StatefulSet
StatefulSet—有状态应用
用于解决各个pod实例独立生命周期管理,提供各个实例的启动顺序和唯一性
稳定,唯一的网络标识符。
稳定,持久存储--StatefulSet:每个pod对应一个pv
有序的,优雅的部署和扩展。
有序,优雅的删除和终止。
有序的自动滚动更新。
4、工作负载-DaemonSet
DaemonSet能够让所有(或者一些特定)的Node节点运行同一个pod。当节点加入到kubernetes集群中, pod会被( DaemonSet)调度到该节点上运行,当节点从kubernetes集群中被移除,被( DaemonSet)调度的pod会被移除,如果删除DaemonSet,所有跟这个DaemonSet相关的pods都会被删除。
在使用kubernetes来运行应用时,很多时候我们需要在一个区域( zone)或者所有Node上运行同一个守护进程( pod),例如如下场景:
每个Node上运行一个分布式存储的守护进程,例如glusterd, ceph
运行日志采集器在每个Node上,例如fluentd, logstash
运行监控的采集端在每个Node,例如prometheus node exporter, collectd等
5、Job
6、CronJob
执行定时任务
二、pod调度流程
1、流程
2、筛选阶段的筛选规则
3、优选阶段