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、复杂任务调度 |