控制器和pod调度流程
在k8s中controllers控制器也叫工作负载,常见的五种工作负载如下:
Deployments | Kubernetes 官网关于workload(控制器)的介绍
一、常见控制器
1、工作负载-ReplicaSet(副本控制器)
- ReplicaSet用于解决pod的扩容和缩容问题。
- 通常用于无状态应用
ReplicaSet是kubernetes中的一种副本控制器,主要作用是控制由其管理的pod,使pod副本的数量始终维持在预设的个数。Kubernetes中还有一个类似功能的控制器:Replication Controller。ReplicaSet是Replication Controller
的下一代副本控制器,目前两者只在标签选择器支持的查找方式有区别,ReplicaSet支持等式查找与集合查找两种方式,Replication Controller只支持等式查找。
kubectl命令同时支持ReplicaSet与Replication Controller两种副本控制器,但是kubectl rolling-update只支持Replication Controller类型的副本控制器,也就是说ReplicaSet无法通过kubectl rolling-update命令滚动升级。如果想
要使用rolling-update功能的话,kubernetes官方推荐使用Deployments,并且因为Deployments是声明式的而rolling-update是命令式,所以推荐使用rollout命令实现滚动升级(kubectl管理对象的方式大体上分成两种,一种是命
令式,另一种是声明式,声明式又细分成命令声明式与对角声明式,三种方式不能混用,所以才有此说)。
实现上kubernetes官方推荐不要直接使用ReplicaSet,用Deployments取而代之,Deployments是比ReplicaSet更高级的概念,它会管理ReplicaSet并提供很多其它有用的特性,最重要的是Deployments支持声明式更新,声明式更
好相比于命令式更新的好处是不会丢失历史变更。总结起来就是:不要再直接使用ReplicaSet。
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、优选阶段