标签搜索

k8s(kubernetes)控制器

cicaba
2025-03-07 / 0 评论 / 1 阅读 / 正在检测是否收录...

Kubernetes 控制器详解

在 Kubernetes(K8s)中,控制器(Controller)是实现集群自动化管理的核心组件。它们通过持续监控集群的实际状态,并将其与期望状态进行对比,从而确保集群资源的正确配置和稳定运行。以下是对 Kubernetes 控制器的详细解释:

1. 控制器的核心概念

  • 期望状态与实际状态:

    • 用户通过声明式 API 定义资源的“期望状态”。
    • 控制器负责监控资源的“实际状态”。
    • 当两者不一致时,控制器会执行操作,使实际状态向期望状态靠拢,这个过程称为“调谐”(Reconcile)。
  • 控制循环:

    • 控制器通过控制循环(Control Loop)不断地执行以下步骤:

      • 观察:监控集群中资源的状态变化。
      • 比较:将实际状态与期望状态进行比较。
      • 调整:如果两者不一致,则执行必要的操作进行调整。

2. 控制器的主要功能

  • 维护期望状态: 确保集群中资源的状态与用户定义的期望状态一致。
  • 自动化管理: 自动化执行资源的创建、更新、删除等操作,减少人工干预。
  • 故障恢复: 在资源发生故障时,自动进行恢复操作,保证集群的稳定性和可用性。
  • 弹性伸缩: 根据负载情况,自动调整资源的副本数量,实现弹性伸缩。

3. 常见的 Kubernetes 控制器

  • ReplicationController(复制控制器)/ReplicaSet(副本集):

    • 确保指定数量的 Pod 副本始终运行。
    • 当 Pod 发生故障或节点失效时,自动创建新的 Pod 副本。
    • ReplicaSet对比ReplicationController支持匹配表达式:
    selector.matchExpressions
    rs 在标签选择器上,除了可以定义键值对的选择形式,还支持 matchExpressions 字段,可以提供多种选择。
    目前支持的操作包括:
    In:label 的值在某个列表中
    NotIn:label 的值不在某个列表中
    Exists:某个 label 存在
    DoesNotExist:某个 label 不存在
  • Deployment(部署控制器):

    • 管理 ReplicaSet 的创建和更新。
    • 支持滚动更新和回滚等功能,实现应用程序的平滑升级。
  • StatefulSet(有状态副本集):

    • 管理有状态应用程序的 Pod 副本。
    • 为每个 Pod 分配唯一的标识符和稳定的网络标识。
  • DaemonSet(守护进程集):

    • 确保每个节点上都运行一个 Pod 副本。
    • 常用于部署日志收集、监控等守护进程。
  • Job/CronJob:

    • Job:创建一次性运行的Pod。
    • CronJob:基于时间的Job,用来做定时任务。
  • Node Controller(节点控制器):

    • 负责监控节点的状态,在节点不可用时执行相应的操作,例如将Pod 标记为不可调度、在节点无法通信时驱逐Pod。
  • ServiceController(服务控制器):

    • 负责监听service和对应的pod副本的变化,如果检测到service被删除,则删除和该service同名的endpoints对象。 如果检测到新的service被创建或者修改,则根据该service的信息获取到相关的pod列表,然后创建或者更新service对应的endpoints对象。
  • IngressController(入口控制器):

    • 管理Ingress 资源,提供外部访问到集群内部服务的方式,通过HTTP/HTTPS 路由流量。

4. 控制器管理器(Controller Manager)

  • Kubernetes 控制器管理器(kube-controller-manager)是运行 Kubernetes 控制器的组件。
  • 它将多个控制器组合在一起,作为一个进程运行,减少了资源消耗。

总结

Kubernetes 控制器是实现集群自动化管理的关键组件。它们通过持续监控和调整资源状态,确保集群的稳定性和可靠性。理解控制器的原理和功能,有助于更好地管理和运维 Kubernetes 集群。

0

评论 (0)

取消