随笔 - 378  文章 - 0  评论 - 5  阅读 - 6085

k8s之控制器

在 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 控制器

  • 滚动更新机制
    spec:
      strategy:
        rollingUpdate:
          maxSurge: 25%          # 最大激增副本数(可同时存在的 Pod 数)
          maxUnavailable: 25%    # 最大不可用副本数
    
  • 故障场景
    当新版本 Pod 持续 CrashLoopBackOff 时,控制器会自动停止滚动更新

2. StatefulSet 控制器

  • 有序部署逻辑
    严格按序号(0 → 1 → 2)创建 Pod,只有前一个 Pod 进入 Running 状态才会创建下一个
  • 生产级配置
    spec:
      podManagementPolicy: Parallel  # 改为并行创建(慎用,破坏有序性)
    

3. Node 控制器

  • 节点心跳检测机制
    (示意图:节点失联处理流程)
    1. 持续监控 kubelet 上报状态
    2. 若超过 node-monitor-grace-period(默认 40s)未收到心跳
    3. 标记节点为 NotReady
    4. 等待 pod-eviction-timeout(默认 5m)后驱逐 Pod

4. GarbageCollector 控制器

  • 级联删除策略对照表
    策略类型 删除行为 适用场景
    Foreground 先删除附属资源,再删除 Owner 严格依赖关系场景
    Background 立即删除 Owner,异步清理附属资源 大多数通用场景
    Orphan 保留附属资源 需要手动管理时

5. Endpoint 控制器

  • 大规模集群优化
    当 Service 关联超过 1000 个 Pod 时,Endpoint 对象更新会显著增加 API Server 负载
    解决方案
    apiVersion: v1
    kind: Service
    spec:
      publishNotReadyAddresses: false  # 只发布 Ready 状态的 Pod
    

三、如何查看运行中的控制器

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. 控制器性能调优

  • 参数调整示例
    # 调整 Deployment 同步周期(默认 1 分钟)
    kube-controller-manager --deployment-controller-sync-period=30s
    

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)
  • 动态供给流程
    1. Pod中声明PVC
    2. StorageClass根据策略创建PV
    3. PVC绑定PV
    4. 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

版本差异警告

  1. 已废弃资源
  2. 版本敏感资源
    • flowcontrol.apiserver.k8s.io/v1beta1 → 1.26+ 版本需使用 v1beta2

通过 kubectl explain <resource> 可查看任意资源的详细字段说明。建议定期审计未使用的资源(如残留的PV/PVC),避免资源泄漏。

总结

Kubernetes 官方控制器是集群的"自动化大脑",目前 1.28 版本包含 28 个核心控制器。生产环境中需要重点关注:

  1. 控制器的协同工作原理
  2. 关键参数调优(如同步周期、错误重试策略)
  3. 大规模集群下的性能优化

建议通过以下命令实时监控控制器健康状态:

kubectl get --raw /metrics | grep 'workqueue_'

关注各控制器的 workqueue_depth 指标,持续超过 1000 时需要介入排查。

posted on   Leo-Yide  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示