在 Kubernetes 中,官方核心控制器(Built-in Controllers) 是 Kubernetes 控制平面(Control Plane)的核心组成部分,全部集成在 kube-controller-manager
组件中。以下是所有官方自带的控制器及其作用解析,基于最新稳定版本(1.28+)整理。
一、核心控制器全景图
1. 工作负载类控制器
控制器名称 |
作用 |
生产级特性 |
Deployment |
管理无状态应用的滚动更新、回滚 |
支持 maxUnavailable 控制更新节奏 |
ReplicaSet |
确保 Pod 副本数符合预期 |
被 Deployment 间接调用,生产环境不直接操作 |
StatefulSet |
管理有状态应用(如数据库) |
支持有序部署、持久化标识(PVC 自动绑定) |
DaemonSet |
确保所有/特定节点运行指定 Pod(如日志采集) |
支持 nodeAffinity 精准控制 |
Job/CronJob |
管理一次性任务和定时任务 |
支持 backoffLimit 控制任务重试策略 |
2. 网络与存储类控制器
控制器名称 |
作用 |
生产级陷阱 |
Endpoint |
维护 Service 与 Pod 的映射关系 |
大规模集群需监控处理延迟(超过 1000 个节点需优化) |
Service |
管理虚拟 IP 和负载均衡规则 |
与云厂商 LoadBalancer 集成时注意 IP 保留策略 |
PersistentVolume |
绑定 PVC 和 PV |
处理 StorageClass 动态供应时的配额竞争问题 |
3. 集群管理类控制器
控制器名称 |
作用 |
生产级技巧 |
Node |
监控节点状态(Ready/MemoryPressure 等) |
配置合理的 node-monitor-grace-period (默认 40s) |
Namespace |
处理命名空间的生命周期事件 |
删除命名空间时的级联删除控制 |
ServiceAccount |
管理 ServiceAccount 的 Token 生成 |
与 RBAC 联动时的权限收敛策略 |
ResourceQuota |
强制执行命名空间级别的资源配额 |
配置 scopeSelector 实现精细控制 |
4. 高级运维类控制器
控制器名称 |
作用 |
生产级场景 |
GarbageCollector |
级联删除依赖资源(如删除 Deployment 时清理 Pod) |
控制 ownerReferences 的级联策略 |
TTL |
自动清理已完成任务的资源(如结束的 Job) |
设置 ttlSecondsAfterFinished 需谨慎 |
Certificate |
自动管理 TLS 证书(需配合 cert-manager 使用) |
生产环境建议使用 Let's Encrypt 集成方案 |
二、生产环境必须掌握的 5 个控制器细节
1. Deployment 控制器
2. StatefulSet 控制器
3. Node 控制器
- 节点心跳检测机制:
(示意图:节点失联处理流程)
- 持续监控
kubelet
上报状态
- 若超过
node-monitor-grace-period
(默认 40s)未收到心跳
- 标记节点为
NotReady
- 等待
pod-eviction-timeout
(默认 5m)后驱逐 Pod
4. GarbageCollector 控制器
- 级联删除策略对照表:
策略类型 |
删除行为 |
适用场景 |
Foreground |
先删除附属资源,再删除 Owner |
严格依赖关系场景 |
Background |
立即删除 Owner,异步清理附属资源 |
大多数通用场景 |
Orphan |
保留附属资源 |
需要手动管理时 |
5. Endpoint 控制器
三、如何查看运行中的控制器
1. 通过 kube-controller-manager 日志
ps aux | grep kube-controller-manager | grep -o '\-\-controllers=.*'
--controllers=*,bootstrapsigner,tokencleaner
2. 官方控制器完整列表(1.28 版本)
attachdetach # 管理 Volume 的挂载/卸载
certificates # 处理证书签名请求(CSR)
clusterrole-aggregation # 聚合 ClusterRole 规则
cronjob # 处理 CronJob 调度
deployment # 管理 Deployment 状态
disruption # PodDisruptionBudget 控制器
endpoint # 维护 Endpoints 对象
endpointslice # 管理 EndpointSlices(替代 Endpoints)
endpointslicemirroring # 跨集群同步 EndpointSlices
ephemeral-volume # 临时卷生命周期管理
garbagecollector # 级联删除控制器
horizontalpodautoscaling # HPA 自动扩缩容
job # 管理 Job 资源
namespace # 处理命名空间删除
nodeipam # 节点 IP 地址管理
nodelifecycle # 节点生命周期管理(原 Node 控制器)
persistentvolume-binder # PV/PVC 绑定
podgc # 清理孤立 Pod
pv-protection # 防止使用中的 PV 被删除
pvc-protection # 防止使用中的 PVC 被删除
replicaset # 维护 ReplicaSet 副本数
replicationcontroller # 兼容旧版 RC(已废弃)
resourcequota # 资源配额控制器
root-ca-cert-publisher # 发布 Root CA 到 ConfigMap
service # 维护 Service 状态
serviceaccount # 管理 ServiceAccount Token
statefulset # 管理 StatefulSet
tokencleaner # 清理过期 ServiceAccount Token
ttl # TTL 过期控制器
四、生产环境避坑指南
1. 控制器冲突场景
- 问题现象:
手动修改由控制器管理的资源(如直接修改 Pod 标签)
- 后果:
控制器会根据声明式配置重新覆盖变更
- 解决方案:
永远通过上层控制器(如 Deployment)管理资源
2. 控制器性能调优
3. 故障排查命令
kubectl get events --field-selector involvedObject.kind=Deployment
journalctl -u kube-controller-manager -n 1000 | grep "Deployment"
k8s v1.23.17
以下是您提供的 kubectl api-resources
输出的详细解析,按功能分类整理,结合生产环境实践经验说明:
一、核心基础资源
1. 集群基础组件
资源名称 |
作用 |
生产环境注意点 |
Node (no ) |
表示Kubernetes集群的工作节点 |
通过kubectl top node 监控资源使用率 |
Namespace (ns ) |
逻辑隔离资源的分区(如prod /test ) |
删除namespace会自动删除其下所有资源(慎用--force ) |
ComponentStatus (cs ) |
显示核心组件状态(如etcd、scheduler) |
仅用于快速检查,详细状态需查看组件日志 |
2. 配置管理
资源名称 |
作用 |
生产技巧 |
ConfigMap (cm ) |
存储非敏感配置数据 |
与kubectl rollout restart deploy 配合实现配置热更新 |
Secret |
存储敏感信息(密码、证书) |
必须开启etcd加密(--encryption-provider-config ) |
ResourceQuota (quota ) |
限制Namespace资源配额(CPU/Memory等) |
结合LimitRange 控制Pod资源范围 |
二、工作负载资源
1. 基础工作负载
资源名称 |
作用 |
生产级配置示例 |
Pod (po ) |
最小调度单元(通常不直接创建) |
通过livenessProbe /readinessProbe 保障可用性 |
Deployment (deploy ) |
管理无状态应用滚动更新 |
strategy.rollingUpdate.maxUnavailable: 25% 控制更新节奏 |
StatefulSet (sts ) |
有状态应用(如MySQL集群) |
需搭配volumeClaimTemplates 实现持久化存储 |
DaemonSet (ds ) |
在指定节点运行守护进程(如日志采集) |
nodeSelector 精准控制部署节点 |
2. 任务调度
资源名称 |
作用 |
生产陷阱 |
Job |
一次性任务 |
设置backoffLimit: 3 防止任务无限重试 |
CronJob (cj ) |
定时任务 |
避免设置过短周期(如<1分钟),可能引发任务堆积 |
三、存储资源
1. 存储抽象层
资源名称 |
作用 |
生产最佳实践 |
PersistentVolume (pv ) |
集群级存储资源(如NFS卷、云磁盘) |
使用StorageClass 实现动态供给 |
PersistentVolumeClaim (pvc ) |
Pod申请的存储资源 |
设置resources.requests.storage 指定容量 |
StorageClass (sc ) |
定义存储供给策略 |
云环境使用volumeBindingMode: WaitForFirstConsumer 延迟绑定优化调度 |
2. 存储扩展
资源名称 |
作用 |
使用场景 |
CSIDriver |
定义CSI存储驱动属性 |
对接第三方存储系统(如Ceph) |
VolumeAttachment |
跟踪Volume挂载状态 |
调试存储挂载问题时查看此资源 |
四、网络资源
1. 服务发现
资源名称 |
作用 |
生产级技巧 |
Service (svc ) |
定义服务访问入口(ClusterIP/NodePort/LoadBalancer) |
使用externalTrafficPolicy: Local 保留客户端源IP |
Endpoints (ep ) |
记录Service关联的Pod IP(通常自动维护) |
手动维护Endpoints可实现对接外部服务 |
EndpointSlice |
替代Endpoints的大规模服务解决方案 |
当服务后端Pod超过1000个时自动切割分片 |
2. 网络策略
资源名称 |
作用 |
生产安全实践 |
NetworkPolicy (netpol ) |
定义Pod网络通信规则 |
按最小化原则配置ingress /egress 规则 |
Ingress (ing ) |
定义外部HTTP(S)访问规则 |
配合Nginx Ingress Controller使用 |
五、安全与权限
1. RBAC
资源名称 |
作用 |
生产级配置 |
Role |
命名空间内的权限规则 |
按最小权限原则分配 |
ClusterRole |
集群级权限规则 |
系统组件(如ingress-nginx)需要合理授权 |
RoleBinding |
将角色绑定到用户/ServiceAccount |
定期审计权限绑定关系 |
2. 证书管理
资源名称 |
作用 |
重要提示 |
CertificateSigningRequest (csr ) |
证书签发请求 |
使用kubelet 自动轮换证书(需开启RotateKubeletClientCertificate ) |
六、扩展与监控
1. 自定义资源(CRD)
资源名称 |
作用 |
典型应用 |
Prometheus (prom ) |
定义Prometheus实例(需安装Prometheus Operator) |
监控数据采集核心配置 |
ServiceMonitor (smon ) |
声明需要监控的服务 |
自动生成Prometheus抓取配置 |
2. 自动扩缩容
资源名称 |
作用 |
生产配置示例 |
HorizontalPodAutoscaler (hpa ) |
根据CPU/内存等指标自动扩缩Pod |
metrics 字段支持自定义指标(如QPS) |
七、高级功能
1. 调度优化
资源名称 |
作用 |
使用场景 |
PriorityClass (pc ) |
定义Pod调度优先级 |
关键业务Pod设置高优先级防止被驱逐 |
RuntimeClass |
指定容器运行时配置(如gVisor安全容器) |
多容器运行时环境使用 |
2. 故障处理
资源名称 |
作用 |
生产应急手段 |
PodDisruptionBudget (pdb ) |
定义Pod中断预算(如滚动更新时最少可用实例数) |
设置minAvailable: 60% 保障服务可用性 |
Event (ev ) |
记录资源变更事件 |
使用kubectl get events --sort-by='.lastTimestamp' 查看最新事件 |
生产环境重点关注组合
1. 存储管理黄金组合
StorageClass → PersistentVolumeClaim → Pod(volumeMounts)
- 动态供给流程:
- Pod中声明PVC
- StorageClass根据策略创建PV
- PVC绑定PV
- Volume挂载到Pod
2. 服务暴露最佳实践
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend
port:
number: 80
3. 监控告警三件套
Prometheus → ServiceMonitor → PrometheusRule
↓
Alertmanager → AlertmanagerConfig
版本差异警告
- 已废弃资源:
- 版本敏感资源:
flowcontrol.apiserver.k8s.io/v1beta1
→ 1.26+ 版本需使用 v1beta2
通过 kubectl explain <resource>
可查看任意资源的详细字段说明。建议定期审计未使用的资源(如残留的PV/PVC),避免资源泄漏。
总结
Kubernetes 官方控制器是集群的"自动化大脑",目前 1.28 版本包含 28 个核心控制器。生产环境中需要重点关注:
- 控制器的协同工作原理
- 关键参数调优(如同步周期、错误重试策略)
- 大规模集群下的性能优化
建议通过以下命令实时监控控制器健康状态:
kubectl get --raw /metrics | grep 'workqueue_'
关注各控制器的 workqueue_depth
指标,持续超过 1000 时需要介入排查。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)