【云原生_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请求。

典型的应用场景
  • 日志收集:比如 fluentd,logstash 等
  • 系统监控:比如 Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond 等
  • 系统程序:比如 kube-proxy, kube-dns, glusterd, ceph 等

StatefulSet 控制器

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

典型的使用场景

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

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

Job 控制器

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

CronJob 控制器

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

结论

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

相关推荐
阿里云云原生12 小时前
Agent 数据飞轮平台的选型和实践
云原生
做运维的阿瑞13 小时前
云项目可观测性与成本治理:告警、日志、Dashboard 与预算标签
大数据·云原生·云计算·terraform
无人生还别怕14 小时前
如何搭建k8s服务(containerd部署)
linux·云原生·容器·kubernetes·openanolisos
知已难寻14 小时前
01 · OpenStack的认证管理 Keystone
运维·服务器·云原生·云计算·openstack
分布式存储与RustFS15 小时前
模型权重散落在每台 GPU?用 RustFS 给 vLLM 做共享权重库
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
木雷坞15 小时前
Baserow Docker部署:导入设备借用CSV,再用表单新增登记
运维·docker·容器
fb_1234516 小时前
从探针到权限:一篇吃透 Kubernetes 健康检查、RBAC 认证授权与 Dashboard 可视化管理
云原生·容器·kubernetes
wefg116 小时前
【Docker】基本指令
运维·docker·容器
mengge.cloud17 小时前
10-28-Kubernetes健康检查认证授权与Dashboard
云原生·容器·kubernetes
做运维的阿瑞18 小时前
EKS 可销毁环境:集群创建、应用部署到账单归零
云原生·云计算·terraform