pod控制器由控制器管理器kube-controller-manager组件提供,pod控制器主要用于对pod创建、修改、删除等操作。常见的pod控制器有Replication Controller、ReplicaSet、Deployment、DaemonSet、StatefulSet、Job、CronJob。
ReplicaSet控制器
ReplicaSet控制器主要用于保证pod的副本数在任何时候都能精确满足我们的期望值
(1)ReplicaSet控制器主要功能
1)保证pod的副本数满足期望值
2)保证pod健康运行
3)弹性伸缩
(2)资源清单
ReplicaSet控制器资源定义与pod相似,其spec字段嵌套的子字段及作用如下
replicas:期望的pod副本数目
selector:当前控制器匹配pod对象的标签选择器,支持matchLabels和matchExpressions两种匹配机制
template:用于创建pod时使用的pod资源模版
minReadySeconds:新建的pod在启动多长时间后,容器未发生崩溃等异常情况,则视为就绪,默认为0
apiVersion: apps/v1 |
(3)维护期望的pod副本数目
修改一个pod的label后,ReplicaSet发现pod副本数目减上了,会重新再创建一个
#修改期望数 |
(4)删除replicaset控制器资源
使用“kubectl delete”命令删除replicaset对象时默认会一并删除其管控的pod对象,有时,这些pod资源可能不是replicaset控制器创建的,此时可以使用“–cascade=false”选项,取消级联,删除相关的pod对象。
#删除名称为test-replicaset的replicaset控制器,并取消与pod的级联 |
Deployment控制器
Deployment是在RS控制器之上的,可为Pod和ReplicaSet资源提供声明式更新的一种控制器;Deployment控制器的主要作用还是为了Pod资源的健康运行,但大部分功能可以通过调节ReplicaSet控制器来实现,同时还添加了事件和状态查看、回滚、版本记录、暂停和启动、多种自动更新方案等特性。
(1)创建Deployment控制器
apiVersion: apps/v1 |
(2)Deployment控制器更新策略
相对于RS控制器,Deployment控制器更新只需要用于指定在pod模版中需要修改的内容,剩下的步骤由其自动完成
Deployment控制器也支持两种更新策略,重新创建和滚动更新,默认更新策略是滚动更新
1)重新创建(recreate):重新创建是先删除现有的pod对象,然后由控制器基于新模版重新创建出新版本的资源对象
2)滚动更新(rolling update):在删除一部分旧版本pod的同时。补充新建一部分新版本的pod对象。
(3)更新
#更新镜像 |
(4)回滚
在更新过程中,如果更新失败时,可能需要回滚到之前的版本或者指定的版本
#回滚到上个版本 |
DaemonSet控制器
DaemonSet确保全部(或者一些)Node上运行一个pod副本,当有Node加入集群时,也会为他们新增一个pod,当Node从集群中剔除时,也会回收这些pod。
apiVersion: apps/v1 |
Job控制器
job负责处理任务,即仅执行一次的任务,它保证处理任务的一个或多个pod成功结束
job的RestartPolicy仅支持Never和OnFailure两种
apiVersion: batch/v1 |
CronJob控制器
CronJob其实就是在Job的基础上加了时间调度,也就是周期性的在给定时间执行。
apiVersion: batch/v1beta1 |
spec.successfulJobsHistoryLimit和spec.failedJobHistoryLimit表示历史限制,可选字段,它们指定了可以保留多少完成和失败的Job,默认没有限制,建议设置