当前位置: Http > K8S > pod常用控制器介绍(deployment、StatefulSet、Job、CronJob、DaemonSet)

pod常用控制器介绍(deployment、StatefulSet、Job、CronJob、DaemonSet)

2023-05-11 分类:K8S 作者:admin 阅读(30)

前言
环境:centos7.9 docker-ce-20.10.9 kubernetes-version v1.22.6
在上一篇《pod的介绍、命令行创建pod》我们介绍了何为pod,以及如何在命令行创建pod,但这都不是我们在生产环境的常规操作,我们在生产环境中一般是通过控制器来创建pod的,并使用控制器来管理pod。本篇我们来论述何为pod控制器。

何为pod控制器
pod控制器,是用于管理、部署pod的一种k8s中重要的资源,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会新建pod的资源。这样,当有了控制器来管理pod,我们就能轻松的通过配置控制器,让控制器来帮我们实现我们所期望的pod扩容、缩容,即使当pod出现异常挂掉,控制器也能立即重新启动一个pod,因为控制器的本质其实就是实时检查pod数量使其符合我们预先设定的值。

常用pod控制器
常用的pod控制器有一下几种:

ReplicationController: 比较原始的pod控制器,已经被废弃,了解即可,有ReplicaSet替代;
ReplicaSet: 保证指定数量的pod运行,并提供pod数据变更,镜像版本变更;
DaemonSet: 在集群每个node上都运行一个pod,确保全部Node 上运行一个 Pod 的副本,适用于每个node工作节点后台日志收集等场景;
CronJob: 用于执行周期性定时任务的pod,主要用于执行周期性计划,类似于Linux的crontab定时任务;
Job: 用于一次性计划任务的pod,执行完毕pod就立即退出,类似于Linux的at命令;
Deployment: 通过创建DaemonSet来创建pod,支持滚动升级,版本回退,Deployment是最常用的pod控制器;
Horizontal Pod Autoscaler: 可以根据集群负载自动调整pod的数量,实现自动扩容缩容,削峰填谷;
StatefulSet: 管理又状态的应用;

ReplicationController介绍(已废弃,基本不会用到这种控制器)
ReplicationController详细内容删除,详情可看原文。

ReplicaSet介绍(一般不会直接用到replicaset,一般是deployment创建replicaset)
详细内容删除,详情可看原文。

DaemonSet介绍(DaemonSet用于确保每个节点都运行一个pod的场景)
DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node加入集群时,也会为他们新增一个 Pod 。当有 Node 从集群移除时,这些 Pod也会被回收。删除 DaemonSet将会删除它创建的所有 Pod。DaemonSet 简写为ds。
使用 DaemonSet 的一些典型用法:
运行集群存储 daemon,例如在每个 Node 上运行 glusterd 、 ceph
在每个 Node 上运行日志收集 daemon,例如 fluentd 、 logstash
在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter、 collectd 、Datadog 代理、New Relic 代理,或 Ganglia gmond

编写一个DaemonSet

 

再次说明:DaemonSet创建的pod只会在每个节点运行1个,也就是说你不用在创建DaemonSet的yaml文件中指定副本数,没必要;当每个节点的DaemonSet管理的pod被删除或者pod异常退出时,DaemonSet控制器又会重新创建一个pod,因为DaemonSet会实时监管每个节点确保存在一个pod运行。

查看daemonset

删除daemonset

Job介绍(一次性计划任务,类似于centos的at命令)
有时候我们可能需要一种这样的pod控制器,即该控制器能实现pod执行完任务就结束,不需要重启或重建pod,相当于一次性任务。这就可以使用job控制器。(可以简单的理解为,Job相当于Linux中的at一次性计划任务)

详细内容删除,详情可看原文。

Deployment和Statefulset区别

Deployment:

  • 适合场景
  • 特点

Statefulset:

  • 适合场景
  • 特点

使用场景:

StatefulSet

有状态集群的调度。

对于ZooKeeper、Elasticsearch、MongoDB、Kafka等有状态集群,虽然集群中的每个Worker节点看起来都是相同的,但每个Worker节点都必须有明确的、不变的唯一ID(主机名或IP地址),这些节点的启动和停止次序通常有严格的顺序。

此外,由于集群需要持久化保存状态数据,所以集群中的Worker节点对应的Pod不管在哪个Node上恢复,都需要挂载原来的Volume

 

DaemonSet

在每个Node上调度并且仅仅创建一个Pod副本。

这种调度通常用于系统监控相关的Pod,比如主机上的日志采集、主机性能采集等进程需要被部署到集群中的每个节点,并且只能部署一个副本

 

Job、CronJob

        对于批处理作业,需要创建多个Pod副本来协同工作,当这些Pod副本都完成自己的任务时,整个批处理作业就结束了。

这种Pod运行且仅运行一次的特殊调度,用常规的RC或者Deployment都无法解决,所以Kubernetes引入了新的Pod调度控制器Job来解决问题,并继续延伸了定时作业的调度控制器CronJob。


  • ClusterIP Service:适用于无状态服务,提供负载均衡和内部访问。

  • Headless Service:适用于有状态服务(如数据库),允许直接访问 Pod IP 或固定 DNS 记录。

  • 关键区别:是否分配 clusterIP 和是否启用负载均衡。

————————————————
来源:https://blog.csdn.net/MssGuo/article/details/122934233

https://zhuanlan.zhihu.com/p/248405724

https://blog.csdn.net/nickDaDa/article/details/90401635

https://xdoctorx.blog.csdn.net/article/details/124681607?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7EPayColumn-1-124681607-blog-118881988.235%5Ev35%5Epc_relevant_increate_t0_download_v2_base&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7EPayColumn-1-124681607-blog-118881988.235%5Ev35%5Epc_relevant_increate_t0_download_v2_base&utm_relevant_index=1

「三年博客,如果觉得我的文章对您有用,请帮助本站成长」

赞(0) 打赏

支付宝
微信
0

支付宝
微信
标签:

上一篇:

下一篇:

你可能感兴趣

共有 0 - pod常用控制器介绍(deployment、StatefulSet、Job、CronJob、DaemonSet)

博客简介

精彩评论

  • admin(6年前 (2020-03-09))

    分别用不同厚度的筏板定义,画图后这设置筏板变截面处理。 http://f.fwxgx.co...

    评:新文章!
  • admin(6年前 (2020-03-09))

    分别用不同厚度的筏板定义,画图后这设置筏板变截面处理。 http://f.fwxgx.co...

    评:新文章!
  • admin(6年前 (2020-03-09))

    新增一个框架图! http://biji.jinli.vip/wp-content/upl...

    评:新文章!
  • 一位WordPress评论者(6年前 (2020-02-13))

    嗨,这是一条评论。 要开始审核、编辑及删除评论,请访问仪表盘的“评论”页面。 评论者头像来自...

    评:世界,您好!