跳转至

Controller

在 Kubernetes (K8S) 中,Controller 是控制循环的一部分,它持续监视集群状态并确保系统实际状态与期望状态一致。Kubernetes 提供了多种内置的 Controller,每种都有特定的功能,用于管理不同类型的资源。

以下是 Kubernetes 中常见的 Controller 类型:


1. Deployment Controller

  • 功能: 管理 Deployment 对象,负责无状态应用的管理。
  • 特点:
  • 实现滚动更新(Rolling Update)。
  • 支持快速扩展和回滚到指定版本。
  • 适用场景: 无状态应用,例如 Web 服务、前端应用。
  • 关键资源: Deployment, ReplicaSet, Pod。

2. ReplicaSet Controller

  • 功能: 管理 ReplicaSet 对象,确保指定数量的 Pod 副本始终运行。
  • 特点:
  • 维持指定数量的 Pod 副本。
  • 被 Deployment 管理时很少直接使用。
  • 适用场景: 需要固定数量副本但不需要滚动更新的场景。

3. StatefulSet Controller

  • 功能: 管理 StatefulSet 对象,适用于有状态应用。
  • 特点:
  • Pod 有固定的网络标识(如 pod-0, pod-1)。
  • 每个 Pod 的存储独立并持久化。
  • Pod 按顺序启动和停止。
  • 适用场景: 数据库(如 MySQL、MongoDB)、分布式存储(如 Elasticsearch)。

4. DaemonSet Controller

  • 功能: 确保指定的每个节点上运行一个 Pod 实例。
  • 特点:
  • 每个节点运行一个 Pod,适用于节点级任务。
  • 自动在新加入的节点上创建 Pod。
  • 适用场景: 节点监控(如 Prometheus Node Exporter)、日志收集(如 Fluentd)。

5. Job Controller

  • 功能: 管理 Job 对象,用于运行一次性任务。
  • 特点:
  • 确保任务完成(可以重试失败任务)。
  • 可用于批量计算、迁移任务。
  • 适用场景: 数据处理、ETL 作业、定期任务。

6. CronJob Controller

  • 功能: 管理 CronJob 对象,用于定时执行任务。
  • 特点:
  • 基于 Cron 表达式调度任务。
  • 定期运行 Job。
  • 适用场景: 定期备份、日志清理、数据同步。

7. Horizontal Pod Autoscaler (HPA) Controller

  • 功能: 根据负载(如 CPU、内存利用率)动态调整 Pod 副本数量。
  • 特点:
  • 自动扩展无状态应用的副本数。
  • 利用资源监控数据(如 Metrics Server)。
  • 适用场景: 应对流量波动的场景。

8. Vertical Pod Autoscaler (VPA) Controller

  • 功能: 动态调整 Pod 的资源请求和限制(CPU、内存)。
  • 特点:
  • 根据实际负载自动调整 Pod 的资源配额。
  • 避免手动调整资源请求。
  • 适用场景: 资源优化、降低成本。

9. NetworkPolicy Controller

  • 功能: 管理 NetworkPolicy 对象,用于定义网络流量规则。
  • 特点:
  • 控制 Pod 之间或 Pod 与外部的流量。
  • 实现微服务间的安全隔离。
  • 适用场景: 安全隔离、微服务架构下的通信管理。

10. Ingress Controller

  • 功能: 管理 Ingress 对象,提供 HTTP/HTTPS 路由。
  • 特点:
  • 提供外部访问服务的能力。
  • 支持路径和主机名路由。
  • 适用场景: Web 应用的域名路由、负载均衡。

11. PersistentVolume Controller

  • 功能: 管理 PersistentVolume (PV)PersistentVolumeClaim (PVC),确保存储资源可用。
  • 特点:
  • 动态创建存储卷(如果配置 StorageClass)。
  • 绑定 PVC 和 PV。
  • 适用场景: 数据持久化存储。

12. Service Controller

  • 功能: 管理 Service 对象,为 Pod 提供负载均衡和服务发现。
  • 特点:
  • 支持 ClusterIP、NodePort、LoadBalancer 类型。
  • 提供内网和公网访问能力。
  • 适用场景: 应用内部或外部的服务访问。

13. Custom Controller

  • 功能: 由用户自定义,用于管理自定义资源(Custom Resource Definitions, CRD)。
  • 特点:
  • 用户可以通过 Operator 扩展 Kubernetes 功能。
  • 实现特定业务逻辑。
  • 适用场景: 数据库 Operator(如 MySQL Operator)、复杂任务管理。

总结表格

Controller 类型 功能 适用资源 示例场景
Deployment Controller 管理无状态应用 Deployment, ReplicaSet Web 服务、API 网关
ReplicaSet Controller 管理副本数 ReplicaSet 简单的固定副本场景
StatefulSet Controller 管理有状态应用 StatefulSet 数据库、分布式存储
DaemonSet Controller 节点级任务 DaemonSet 日志收集、监控任务
Job Controller 一次性任务 Job 数据迁移、ETL 作业
CronJob Controller 定期任务 CronJob 定期备份、日志清理
Horizontal Pod Autoscaler (HPA) 动态扩展 Pod 副本 Deployment, ReplicaSet 流量波动的无状态应用
Vertical Pod Autoscaler (VPA) 动态调整 Pod 资源 Pod 优化资源使用
NetworkPolicy Controller 管理网络规则 NetworkPolicy 安全隔离、微服务通信管理
Ingress Controller 管理外部访问路由 Ingress HTTP 路由、负载均衡
PersistentVolume Controller 管理持久化存储 PV, PVC 数据库、文件存储
Service Controller 提供服务发现和负载均衡 Service 内部服务访问、外部暴露
Custom Controller 用户自定义逻辑 CRD 数据库 Operator、复杂任务调度