pod控制器

1、定义

又称工作负载,用于管理pod的中间层,确保pod资源符合预期的状态(副本数、容器的重启策略、镜像拉取策略、pod出现故障时的重启等)

2、控制器类型

replicaSet

指定pod副本的数量。三个组件:①pod的副本数②标签选择器(判断哪个pod归自己管理)③扩缩容

Deployment

工作在replicaSet之上的。目前最好的控制器,支持滚动更新和回滚,并提供声明式配置。管理无状态的应用

statefulSet

可以设置副本数、扩缩容,pod的序号是固定的,重启后pod的名称不会发生变化。管理有状态的应用

DaemonSet

可以在所有节点部署一个相同的pod,没有副本数,可以限制部署的节点,服务必须是守护进程。管理无状态的应用

job

工作pod控制器。执行完成即刻退出,不需要重启,也不需要重建

cronjob

周期性的定时任务控制器。无需在后台持续运行

无状态应用:pod名称是无序的,所有pod都是一体的,所有deployment下的pod共享一个存储

有状态应用:pod名称是有序的(0到N),所有pod都是独立的,存储卷也是独立的,删除也不会改变pod的序号,扩缩容也是有序扩缩容

3、pod与控制器的关系

pod通过标签label与selector进行关联

(1)DaemonSet控制器

无状态应用:pod名称是无序的,所有pod都是一体的,所有deployment下的pod共享一个存储pod控制器_第1张图片建议web终端不要加此字段,否则会导致服务中断,也会中断业务pod控制器_第2张图片pod控制器_第3张图片pod控制器_第4张图片pod控制器_第5张图片pod控制器_第6张图片pod控制器_第7张图片

Deployment的默认策略(一般不动)

maxSurge: 25%

升级过程中,新启动的pod数量不能超过期望pod数的25%

maxUnavailable: 25%

升级过程中,新pod启动成功后,销毁的旧的pod数量不能超过期望pod的25%

(2)statefulSet控制器(结合动态pv)

有状态应用:pod名称是有序的(0到N),所有pod都是独立的,存储卷也是独立的,删除也不会改变pod的序号,扩缩容也是有序扩缩容

pod控制器_第8张图片pod控制器_第9张图片pod控制器_第10张图片pod控制器_第11张图片pod控制器_第12张图片pod控制器_第13张图片pod控制器_第14张图片pod控制器_第15张图片

扩容:

pod控制器_第16张图片pod控制器_第17张图片pod控制器_第18张图片pod控制器_第19张图片缩容:

pod控制器_第20张图片pod控制器_第21张图片pod控制器_第22张图片pod控制器_第23张图片pod控制器_第24张图片

statefulSet控制器的特点

 headless service无头服务

没有clusterIP,是k8s集群中一种特殊的服务类型,不分配ClusterIP给service,也不会负载均衡到后端pod,由DNS来提供服务的发现和访问,由于ClusterIP是空的,所以k8s集群会给每个headless service中的pod创建一个DNS记录

格式:pod-name.headless-service-name.namespace.svc.cluster.local

web-0

nginx-web

defaults

本地地址(pod的IP地址)

通过DNS直接解析访问pod的IP地址

web-0 10.244.1.10

 必须有动态pvc

有状态的副本集群都会涉及持久化存储,每个pod是独立个体,每个pod都有一个自己的专用的存储点,statefulSet在定义时已规定每个pod不能使用同一个存储卷,所以需要动态pv

为什么用headless service无头服务?

有序、独立个体。deployment的pod是无序的,没有名称的随机字符串,需要一个集中的clusterIP来集中统一为这些pod提供一个网络服务。statefulSet是有序的,且pod名称是固定的,重建之后pod的标识符也不变(pod名称是唯一的标识符),系统直接通过pod名称解析pod的IP地址(pod名称不变,类似于访问百度一样,即便有多个IP地址,访问域名即可访问IP地址)pod控制器_第25张图片

pod控制器_第26张图片

②应用场景

 不是固定节点的应用,不是固定IP的应用

 更新、发布较频繁

 支持自动伸缩。节点的资源不够时可以自动扩

(3)daemonSet控制器(用于后台运行的网络)

作用:确保每个节点上都会创建一个pod,无法指定副本数。若有node加入集群,也会为它新增一个pod;当node节点从集群中移除时,pod也会被回收

①节点随机部署pod

pod控制器_第27张图片

注:daemonset无法指定副本数

注:即便没有指定副本数,也会在每个节点上创建一个pod

②指定节点标签部署pod

pod控制器_第28张图片注:不需要指定调度策略,默认会在每个节点创建一个pod,除非节点上设置了污点,不会在此节点上创建pod。可以通过指定的方式把daemonset部署在指定的节点pod控制器_第29张图片基于控制器创建的pod,delete相当于重启,要彻底删除pod必须删除控制器pod控制器_第30张图片

在delete pod容器之前要查看是基于控制器创建的,还是自主式创建pod。基于控制器创建的pod可以delete相当于重启,dalete删除自主式创建的pod是真的删除(慎重)

(4)job控制器(普通任务)

作用

适用于只需要执行一次的任务。比如脚本、数据库迁移、视频解码等业务

②特点

• 必须指定容器的重启策略OnFailure或Never;

• 失败次数默认是6次;

• 更新yaml文件,必须先删除任务再更新,无法动态更新

pod控制器_第31张图片

pod控制器_第32张图片对于k8s系统来说,既然已定义job,即只需要执行一次或指定次数,不能一直运行pod控制器_第33张图片pod控制器_第34张图片pod控制器_第35张图片pod控制器_第36张图片pod控制器_第37张图片pod控制器_第38张图片

(5)cronjob控制器(定时任务)

周期性任务定时执行。与linux的crontab语法一样

①格式:分 时 日 月 周

②应用场景:定时备份、通知、定时检测(结合探针一起)

③特点

• 失败次数默认是3次

• 必须设置pod的重启策略

pod控制器_第39张图片pod控制器_第40张图片pod控制器_第41张图片pod控制器_第42张图片pod控制器_第43张图片

你可能感兴趣的:(kubernetes)