【云原生_K8S系列】Kubernetes 控制器简介

概述

Kubernetes是一个开源的容器编排平台,旨在自动化部署、扩展和管理容器化应用。Kubernetes 的核心组件之一是控制器(Controller),它负责确保集群中的实际状态与用户定义的期望状态一致。控制器是 Kubernetes 控制平面的一个重要组成部分,通过持续监控集群的状态并执行必要的操作来维护集群的健康和稳定。

控制器的工作原理

控制器基于控制循环(Control Loop)工作,这是一种反馈机制,用于持续对比当前状态和期望状态,并采取措施将两者保持一致。控制器的基本流程如下:

  1. 观察:控制器通过 API 服务器获取集群的当前状态。
  2. 分析:将当前状态与期望状态进行对比。
  3. 行动:如果当前状态与期望状态不符,控制器会执行必要的操作(如创建、更新或删除资源)以达到期望状态。

常见的 Kubernetes 控制器

Deployment 控制器

Deployment 控制器是一种用于管理应用部署的高级工具。它提供滚动更新、回滚和扩展等功能,使用户能够轻松地更新应用版本,并在更新过程中保持服务的高可用性。通过 Deployment,用户只需声明目标状态,Deployment 控制器会自动对 ReplicaSet 进行操作,以确保集群达到期望的状态。

相比于传统的 ReplicationController,Deployment 提供了一种更为便捷的声明式定义方法。这意味着用户只需描述 Deployment 中的目标状态,而不必手动调整 ReplicaSet,Deployment 控制器会自动进行必要的调整,从而实现更高效、更易管理的应用部署。

典型的应用场景
  • 定义 Deployment 来创建 ReplicaSet 和 Pod
  • 滚动升级和回滚应用
  • 扩容和缩容
  • 暂停和继续 Deployment

Deployment 并不是直接管理或创建 Pod,而是通过创建和管理 ReplicaSet 来实现这一目标。当创建一个名为 nginx-Deploy 的 Deployment 时,系统会同时创建一个 ReplicaSet,其名称形式为 nginx-Deploy-xxx,其中xxx 是一个随机码。这个 ReplicaSet 再进一步创建和管理相应的 Pod

DaemonSet 控制器

DaemonSet 确保在所有(或部分)节点上运行一个 Pod 副本。当有新节点加入集群时,DaemonSet 会在这些节点上新增一个 Pod;当节点从集群中移除时,相应的 Pod 也会被删除。删除 DaemonSet 会移除它所创建的所有 Pod。

如果需要在每个节点上运行多个 Pod,可以通过定义多个 DaemonSet 来实现。

通常情况下,一个 DaemonSet 将覆盖所有的节点。复杂一点儿的用法,可能会为某一类守护进程设置多个 DaemonSets,每一个 DaemonSet 针对不同类硬件类型设定不同的内存、cpu请求。

典型的应用场景
  • 日志收集:比如 fluentdlogstash
  • 系统监控:比如 Prometheus Node ExportercollectdNew Relic agentGanglia gmond
  • 系统程序:比如 kube-proxykube-dns, glusterd, ceph

StatefulSet 控制器

StatefulSet 控制器用于管理有状态应用,例如数据库或需要稳定网络标识的应用。与 ReplicaSet 不同,StatefulSet 确保每个 Pod 都有唯一的标识和持久存储,从而支持应用的有序部署和扩展。

典型的使用场景

对于有如下要求的应用程序,StatefulSet 非常适用:

  • 稳定、唯一的网络标识(dnsname)
  • 每个Pod始终对应各自的存储路径(PersistantVolumeClaimTemplate)
  • 按顺序地增加副本、减少副本,并在减少副本时执行清理
  • 按顺序自动地执行滚动更新

Job 控制器

Job 控制器用于批处理任务,确保一组 Pod 在成功完成其工作后终止。Job 控制器适用于一次性任务或周期性任务,如数据处理和分析。

CronJob 控制器

CronJob 控制器用于定时执行 Job,类似于 Linux 的 cron 调度。它允许用户按照预定的时间表执行任务,适用于定期备份、报告生成等场景。

结论

Kubernetes 控制器在维护集群稳定性和实现自动化运维方面起着至关重要的作用。通过控制循环机制,控制器能够确保集群的实际状态始终符合用户的期望,从而实现高效的资源管理和应用部署。了解和善用各种控制器,可以帮助我们更好地管理和扩展 Kubernetes 集群,提升整体系统的可靠性和可维护性。

相关推荐
Python私教20 分钟前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
运维&陈同学1 小时前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
O&REO2 小时前
单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南
云原生·容器·kubernetes
politeboy2 小时前
k8s启动springboot容器的时候,显示找不到application.yml文件
java·spring boot·kubernetes
运维小文3 小时前
K8S资源限制之LimitRange
云原生·容器·kubernetes·k8s资源限制
登云时刻3 小时前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(二)
redis·容器·kubernetes
wuxingge11 小时前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
志凌海纳SmartX12 小时前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总12 小时前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿13 小时前
k8s 集群安装
云原生·容器·kubernetes