k8s学习笔记(五):k8s的控制器详解
一篇文章教你搞懂k8s的控制器!
文章目录
一、pod创建方式
在kubernetes中,按照Pod的创建方式可以将其分为两类:
- 自主式:kubernetes直接创建出来的Pod,这种Pod删除后就没有了,也不会重建。
- 控制器创建pod:通过Pod控制器创建的Pod,这种Pod删除之后还会自动重建。
Pod控制器是管理Pod的中间层,使用了Pod控制器之后,我们只需要告诉Pod控制器,想要多少个什么样的Pod就可以了,它就会创建出满足条件的Pod并确保每一个Pod处于用户期望的状态,如果Pod在运行中出现故障,控制器会基于指定的策略重启或重新创建pod
二、工作负载资源
工作负载是在 Kubernetes 上运行的应用程序
在 Kubernetes 中,无论你的负载是由单个组件还是由多个一同工作的组件构成, 你都可以在一组 Pod 中运行它。 在 Kubernetes 中,Pod 代表的是集群上处于运行状态的一组 容器 的集合。
负载资源来替用户管理一组 Pod。 这些负载资源通过配置控制器来确保正确类型的、处于运行状态的 Pod 个数是正确的,与用户所指定的状态相一致。
三、控制器的类型
- ReplicaSet,主要作用是保证一定数量的Pod能够正常运行,它会持续监听这些Pod的运行状态,一旦Pod发生故障,就会重启或重建。同时它还支持对Pod数量的扩缩容和版本镜像的升级
- Deployment,并不直接管理Pod,而是通过管理ReplicaSet来间接管理Pod,即:Deployment管理ReplicaSet,ReplicaSet管理Pod。所以Deployment的功能比ReplicaSet强大,包括ReplicaSet的所有功能,发布的停止、继续,版本滚动更新和版本回退
- DaemonSet,可以保证集群中的每一台(或指定)节点上都运行一个副本,一般适用于日志收集、节点监控等场景。也就是说,如果一个Pod提供的功能是节点级别的(每个节点都需要且只需要一个),那么这类Pod就适合使用DaemonSet类型的控制器创建
- Job,可以保证指定数量的pod批量完成一次性的任务,批处理调度
- CronJob,以Job控制器为其管控对象,并借助它管理Pod资源对象,Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但CronJob可以以类似Linux操作系统的周期性任务作业计划的方式控制器运行时间点及重复运行的方式,换言之,CronJob可以在特定的时间点反复去执行Job任务。
- Horizontal Pod Autoscaler,以根据集群负载自动调整Pod的数量,实现削峰填谷。
- StatefulSet,管理有状态的应用。
ReplicaSet
主要作用是保证一定数量的Pod能够正常运行,它会持续监听这些Pod的运行状态,一旦Pod发生故障,就会重启或重建。同时它还支持对Pod数量的扩缩容和版本镜像的升级
Deployment
为了更好的解决服务编排的问题,kubernetes在v1.2版本开始,引入了Deployment控制器。值得一提的是,Deployment控制器并不直接管理Pod,而是通过管理ReplicaSet来间接管理Pod,即:Deployment管理ReplicaSet,ReplicaSet管理Pod。所以Deployment的功能比ReplicaSet强大。
主要功能如下:
- 支持ReplicaSet的所有功能。
- 支持发布的停止、继续。
- 支持版本滚动更新和版本回退。
Horizontal Pod Autoscaler
我们已经可以通过手动执行kubectl scale
命令实现Pod的扩缩容,但是这显然不符合kubernetes的定位目标–自动化和智能化。kubernetes期望可以通过监测Pod的使用情况,实现Pod数量的自动调整,于是就产生了HPA这种控制器。
HPA可以获取每个Pod的利用率,然后和HPA中定义的指标进行对比,同时计算出需要伸缩的具体值,最后实现Pod的数量的调整。其实HPA和之前的Deployment一样,也属于一种kubernetes资源对象,它通过追踪分析目标Pod的负载变化情况,来确定是否需要针对性的调整目标Pod的副本数。
DaemonSet
DaemonSet类型的控制器可以保证集群中的每一台(或指定)节点上都运行一个副本,一般适用于日志收集、节点监控等场景。也就是说,如果一个Pod提供的功能是节点级别的(每个节点都需要且只需要一个),那么这类Pod就适合使用DaemonSet类型的控制器创建
DaemonSet控制器的特点:
- 每向集群中添加一个节点的时候,指定的Pod副本也将添加到该节点上。
- 当节点从集群中移除的时候,Pod也会被垃圾回收。
Cronjob
CronJob控制器以Job控制器为其管控对象,并借助它管理Pod资源对象,Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但CronJob可以以类似Linux操作系统的周期性任务作业计划的方式控制器运行时间点及重复运行的方式,换言之,CronJob可以在特定的时间点反复去执行Job任务。
StatefulSet
- 无状态应用
- 认为pod都是一样的
- 随意进行伸缩扩展
- 不用考虑在那个node运行
- 没有顺序要求
- 有状态应用
- 有顺序要求
- pod是独立不一样的,保证pod启动顺序和唯一性
- 需要考虑在哪个pod进行运行
- 需要安装顺序进行伸缩和扩展
- StatefulSet是Kubernetes提供的管理有状态应用的负载管理控制器。
- StatefulSet部署需要HeadLinessService(无头服务)
使用HeadLinessService(无头服务)
- 在使用Deployment的时候,每一个Pod名称是没有顺序的,是通过随机字符串拼凑而成的,因此此时的pod是无顺序的,但是在StatefulSet中要求pod是有序的每一个pod不能被随意取代,pod重建后pod名称保持不变
- Pod的P是变化的,所以是以pod名称来识别,pod名称是pod唯一识别码,无头服务可以给每一个pod一个唯一的名称
更多推荐
所有评论(0)