【云原生_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 集群,提升整体系统的可靠性和可维护性。

相关推荐
java_logo1 小时前
Docker 部署微服务项目保姆级教程
java·运维·docker·微服务·容器·eureka·架构
阿里云云原生2 小时前
Higress v2.1.8:30 项引擎更新 + 4 项控制台更新
云原生
遇见火星4 小时前
Docker入门:快速部署你的第一个Web应用
前端·docker·容器
阿里云云原生5 小时前
移动端性能监控探索:iOS RUM SDK 技术架构与实践
云原生
阿里云云原生5 小时前
Nacos 3.1.0 正式发布,支持 A2A 注册中心与 MCP 注册协议增强
微服务·云原生
阿里云云原生6 小时前
Qoder 上线提示词增强功能,将开发者从“提示词”的负担中解放出来
云原生
suknna6 小时前
通过命令模拟pod创建
kubernetes
维诺菌6 小时前
k8s java应用pod内存占用过高问题排查
java·jvm·云原生·容器·性能优化·kubernetes
回忆是昨天里的海6 小时前
k8s安装-kubeadm join,将工作节点加入k8s集群
java·服务器·kubernetes
浪飘6 小时前
k8s device plugin
java·docker·kubernetes