当前位置: 首页 > news >正文

k8s中的控制器

k8s中的控制器

控制器概念

在 Kubernetes(k8s)中,控制器(Controllers) 是核心组件之一,它们通过监控集群状态并持续调整以达到用户期望的目标状态(Desired State),实现了集群的自动化管理。控制器遵循 “声明式 API” 理念,即用户只需定义目标状态,控制器负责协调实际状态向目标状态靠近。

控制器的核心作用

  • 监控:通过 API Server 持续监听资源对象(如 Pod、Deployment 等)的状态变化。

  • 对比:将实际状态与用户定义的目标状态(在 YAML/JSON 配置中声明)进行对比。

  • 调谐(Reconciliation):当实际状态与目标状态不一致时,执行操作(如创建 / 删除 Pod、扩缩容等),使实际状态趋近于目标状态。

常见的控制器

ReplicaSet 控制器

  • 作用:确保集群中始终运行指定数量的 Pod 副本,是 Deployment 的底层依赖。

  • 注意:用户通常不直接操作 ReplicaSet,而是通过 Deployment 管理(Deployment 会自动创建和控制 ReplicaSet)。

    [root@master ~]# vim replicaset.yml [root@master ~]# kubectl apply -f replicaset.yml replicaset.apps/replicaset created[root@master ~]# kubectl get pods  --show-labelsNAME               READY   STATUS    RESTARTS   AGE   LABELSreplicaset-flqz8   1/1     Running   0          14s   app=myappreplicaset-jrpgr   1/1     Running   0          14s   app=myapp[root@master ~]# kubectl label pod replicaset-flqz8 app=lpy --overwritepod/replicaset-flqz8 labeled[root@master ~]# kubectl get pods  --show-labelsNAME               READY   STATUS    RESTARTS   AGE    LABELSreplicaset-cb84t   1/1     Running   0          4s     app=myappreplicaset-flqz8   1/1     Running   0          105s   app=lpyreplicaset-jrpgr   1/1     Running   0          105s   app=myapp[root@master ~]# kubectl label pod replicaset-flqz8 app-pod/replicaset-flqz8 unlabeled[root@master ~]# kubectl get pods  --show-labelsNAME               READY   STATUS    RESTARTS   AGE     LABELSreplicaset-cb84t   1/1     Running   0          34s     app=myappreplicaset-flqz8   1/1     Running   0          2m15s   <none>replicaset-jrpgr   1/1     Running   0          2m15s   app=myapp[root@master ~]# kubectl delete pods replicaset-cb84tpod "replicaset-cb84t" deleted#自愈[root@master ~]# kubectl get pods  --show-labelsNAME               READY   STATUS    RESTARTS   AGE     LABELSreplicaset-flqz8   1/1     Running   0          3m20s   <none>replicaset-jrpgr   1/1     Running   0          3m20s   app=myappreplicaset-tp2w9   1/1     Running   0          4s      app=myapp

Deployment 控制器

  • 作用:管理无状态应用,通过控制 ReplicaSet 实现 Pod 的创建、更新、回滚和扩缩容。

  • 核心功能:

    • 确保指定数量的 Pod 副本(Replicas)始终运行。

    • 支持滚动更新(Rolling Update)和重建更新(Recreate)策略,实现零停机升级。

    • 可回滚到历史版本(基于 ReplicaSet 的历史记录)。

  • 适用场景:Web 服务、API 服务等无状态应用。

[root@master ~]# vim deployment.yml[root@master ~]# kubectl apply -f deployment.ymldeployment.apps/deployment created[root@master ~]# kubectl get pods -o wideNAME                          READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATESdeployment-5d886954d4-4l2cg   1/1     Running   0          16s   10.244.1.13   node1   <none>           <none>deployment-5d886954d4-8m7r9   1/1     Running   0          16s   10.244.2.18   node2   <none>           <none>deployment-5d886954d4-czt8r   1/1     Running   0          16s   10.244.2.19   node2   <none>           <none>deployment-5d886954d4-ktpd8   1/1     Running   0          16s   10.244.1.12   node1   <none>           <none>[root@master ~]# curl 10.244.1.13Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>[root@master ~]# vim deployment.yml[root@master ~]# kubectl apply -f deployment.ymldeployment.apps/deployment configured[root@master ~]# kubectl get pods -o wideNAME                          READY   STATUS              RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATESdeployment-5d886954d4-4l2cg   0/1     Terminating         0          5m40s   <none>        node1   <none>           <none>deployment-5d886954d4-8m7r9   1/1     Running             0          5m40s   10.244.2.18   node2   <none>           <none>deployment-7f4786db9c-2hw94   0/1     ContainerCreating   0          2s      <none>        node1   <none>           <none>deployment-7f4786db9c-66nvl   1/1     Running             0          9s      10.244.2.20   node2   <none>           <none>deployment-7f4786db9c-gc9v5   1/1     Running             0          9s      10.244.1.14   node1   <none>           <none>deployment-7f4786db9c-hncht   1/1     Running             0          2s      10.244.2.21   node2   <none>           <none>[root@master ~]# kubectl get pods -o wideNAME                          READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATESdeployment-7f4786db9c-2hw94   1/1     Running   0          26s   10.244.1.15   node1   <none>           <none>deployment-7f4786db9c-66nvl   1/1     Running   0          33s   10.244.2.20   node2   <none>           <none>deployment-7f4786db9c-gc9v5   1/1     Running   0          33s   10.244.1.14   node1   <none>           <none>deployment-7f4786db9c-hncht   1/1     Running   0          26s   10.244.2.21   node2   <none>           <none>[root@master ~]# curl 10.244.1.15Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>

DaemonSet 控制器

  • 作用:确保集群中的所有节点(或指定节点) 都运行一个相同的 Pod 副本。

  • 核心功能:

    • 新节点加入集群时,自动在该节点上创建 Pod;节点移除时,自动删除 Pod。

    • 可通过节点选择器(NodeSelector)指定仅在特定节点运行。

  • 适用场景:日志收集(如 Fluentd、Logstash)、监控代理(如 Prometheus Node Exporter)、网络插件(如 Calico)等。

[root@master~]# cat daemonset-example.ymlapiVersion: apps/v1kind: DaemonSetmetadata:name: daemonset-examplespec:selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:tolerations:      #对于污点节点的容忍- effect: NoScheduleoperator: Existscontainers:- name: nginximage: nginx​[root@master ~]# kubectl get pods  -o wideNAME              READY   STATUS    RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATESdaemonset-87h6s   1/1     Running   0          47s   10.244.0.8    k8s-master   <none>           <none>daemonset-n4vs4   1/1     Running   0          47s   10.244.2.38   k8s-node2    <none>           <none>daemonset-vhxmq   1/1     Running   0          47s   10.244.1.40   k8s-node1    <none>           <none>

Job 控制器

  • 作用:管理一次性任务(任务完成后自动终止),确保任务成功执行完成。

  • 核心功能:

    • 任务完成(Pod 成功终止)后,Job 停止工作,保留 Pod 日志供查看。

    • 支持并行执行(通过 parallelism 配置并行 Pod 数量)。

  • 适用场景:数据备份、批处理计算、一次性脚本执行等。

CronJob 控制器

  • 作用:管理定时任务(基于时间调度的 Job),类似 Linux 的 crontab

  • 核心功能:

    • 按 cron 表达式(如 0 */3 * * * 表示每 3 小时执行一次)触发 Job。

    • 支持配置任务执行历史保留策略。

  • 适用场景:定时备份、定时数据清理、周期性报表生成等。

控制器的工作原理

所有控制器都遵循 “调谐循环(Reconciliation Loop)” 逻辑:

  1. 观察(Observe):通过 API Server 获取资源的实际状态(如当前运行的 Pod 数量)。

  2. 分析(Analyze):对比实际状态与目标状态(如用户定义的 replicas: 3),判断是否存在差异。

  3. 行动(Act):若存在差异,执行操作(如创建新 Pod、删除多余 Pod)以消除差异。

这个过程会持续运行,确保集群状态始终与用户定义的目标一致。

自定义控制器

除了内置控制器,用户还可以通过 Kubernetes API 扩展机制(如 Operator SDK、Kubebuilder)开发自定义控制器,以管理特定业务场景的资源(如数据库集群、AI 模型训练任务等)。自定义控制器通常与自定义资源(CRD,CustomResourceDefinition) 结合使用,实现业务逻辑的自动化。

总结来说,控制器是 Kubernetes 实现自动化和自愈能力的核心,通过内置或自定义控制器,用户可以简化集群管理,确保应用始终按预期运行。

http://www.dtcms.com/a/506850.html

相关文章:

  • Blender入门学习02
  • 动态规划的“数学之魂”:从DP推演到质因数分解——巧解「只有两个键的键盘」
  • Blender入门学习01
  • 网站开发word文档精品简历模板网站
  • WrenAI:企业级AI数据分析平台技术解析
  • 【Processing】椭圆眼珠鼠标跟随
  • 工业显示器在矿用挖掘机中的应用
  • 济南企业网站开发网站建设域名
  • 【深度学习计算机视觉】14:实战Kaggle比赛:狗的品种识别(ImageNet Dogs)
  • 基于k8s的Python的分布式深度学习训练平台搭建简单实践
  • 网站服务器地址在哪里看前端工程师是做网站吗
  • 基于SpringBoot的环保行为记录与社区互动平台(Vue+MySQL)
  • 洛谷 P3392 涂条纹-普及-
  • 【 柒个贰航空旅游-注册安全分析报告-无验证方式导致安全隐患】
  • CentOS 7 安装 MySQL 8
  • Java 数据类型分类
  • 定制高端网站建设设计上传网站图片不显示
  • 无人机路径规划与定位技术原理及实现详解
  • 自己做公司网站适用于手机的网站怎么建设
  • 解决前端多标签页通信:BroadcastChannel
  • [css] border 渐变
  • 前端错误监控实践:Sentry 在 Vite + Vue 项目中的配置与原理详解
  • Marin说PCB之GMSL2网络中AC电容前端控制100欧姆和不做差分100欧姆的区别?
  • Oracle 数据库 Schema 备份与导入全攻略
  • PySide6 使用搜索引擎搜索 多类实现
  • 东莞市外贸网站建设公司自己做投票的网站
  • 网站建设的基础服务器专业建站公司的业务内容
  • 【iOS】KVC 与 KVO 的基本了解与使用
  • Day66 DHT11温湿度传感器驱动开发与单总线通信协议
  • 【代码管理】在本地使用github和gitee之后,可能存在冲突,导致再次提交代码时提示Couldn‘t connect to server