Kubernetes 中的工作负载管理

本文系统梳理了 Kubernetes 工作负载管理的核心概念、主要控制器、生命周期管理与最佳实践,帮助读者理解如何高效部署和维护集群中的应用工作负载。

核心概念

Kubernetes 工作负载管理的核心是 Pod——Kubernetes 中最小的可部署单元。但实际生产中,Pod 通常由更高层级的控制器管理,这些控制器提供了扩缩容、滚动更新、自愈等能力。

Pod:基础单元

Pod 是由一个或多个容器组成的组,容器间共享存储和网络资源。Pod 是所有工作负载的基础构建块。

图 1: Pod 结构示意图
图 1: Pod 结构示意图

工作负载资源层级

Kubernetes 提供多种控制器管理 Pod,适用于不同类型的工作负载。

图 2: 工作负载资源层级关系
图 2: 工作负载资源层级关系

Deployment 控制器

Deployment 提供 Pod 和 ReplicaSet 的声明式更新。用户定义期望状态,Deployment 控制器以受控速率将实际状态调整为期望状态。

Deployment 基础

Deployment 管理 ReplicaSet,ReplicaSet 再管理 Pod。这种所有权链条支持滚动更新和回滚等高级特性。

图 3: Deployment 控制器结构
图 3: Deployment 控制器结构

滚动更新流程

滚动更新时,Deployment 创建新 ReplicaSet 并逐步扩容,同时缩减旧 ReplicaSet,确保应用高可用。

图 4: Deployment 滚动更新流程
图 4: Deployment 滚动更新流程

StatefulSet 控制器

StatefulSet 适用于需要以下特性的应用:

  • 稳定、唯一的网络标识
  • 稳定的持久化存储
  • 有序、优雅的部署与扩缩容
  • 有序、自动的滚动更新

StatefulSet 结构

与 Deployment 不同,StatefulSet 为每个 Pod 保持粘性标识,提供稳定主机名和持久卷,Pod 重调度后依然保持数据和身份。

图 5: StatefulSet 结构示意图
图 5: StatefulSet 结构示意图

StatefulSet 与 Deployment 对比

特性StatefulSetDeployment
Pod 标识稳定、有序(web-0, web-1)随机、临时
存储稳定持久存储临时或共享
扩缩容有序、一次一个可同时扩缩多个 Pod
更新有序、受控可同时更新多个 Pod
典型场景有状态应用(数据库等)无状态应用
表 1: StatefulSet 与 Deployment 特性对比

Job 与 CronJob 控制器

Job 和 CronJob 创建会运行至完成的 Pod,而非长期运行。

Job 类型与模式

Job 可配置为不同模式:

图 6: Job 类型与模式
图 6: Job 类型与模式

CronJob 定时调度

CronJob 按时间表创建 Job,类似于 Unix 的 cron 工具。

DaemonSet 控制器

DaemonSet 确保所有(或部分)节点上都运行一份 Pod。节点加入集群时自动添加 Pod,节点移除时自动清理。

DaemonSet 典型场景

DaemonSet 常用于:

  • 集群存储守护进程
  • 节点日志收集守护进程
  • 节点监控守护进程
图 7: DaemonSet 结构示意图
图 7: DaemonSet 结构示意图

ReplicaSet 控制器

ReplicaSet 用于维持指定数量的 Pod 副本,保证应用高可用。通常由 Deployment 管理,实现滚动更新和回滚。

ReplicaSet 与 Deployment 关系

图 8: Deployment 与 ReplicaSet 关系
图 8: Deployment 与 ReplicaSet 关系

工作负载生命周期管理

高效的工作负载管理需理解 Pod 生命周期、健康检查与中断管理。

Pod 生命周期

Pod 遵循明确的生命周期,从创建到终止经历多个阶段。

图 9: Pod 生命周期状态图
图 9: Pod 生命周期状态图

容器探针

Kubernetes 提供多种探针检测容器健康:

探针类型作用失败时动作
Liveness Probe检测容器是否存活重启容器
Readiness Probe检测容器是否可对外服务从服务端点移除
Startup Probe检测应用是否已启动延迟存活/就绪检查
表 2: 容器探针类型说明

水平 Pod 自动扩缩容

Horizontal Pod Autoscaler(HPA)可根据 CPU 或自定义指标自动扩缩 Deployment、ReplicaSet 或 StatefulSet 的 Pod 数量。

图 10: HPA 自动扩缩容流程
图 10: HPA 自动扩缩容流程

高级工作负载模式

Init 容器与 Sidecar 容器

Init 容器在主容器启动前依次运行并完成。Sidecar 容器与主容器并行运行,提供辅助功能。

图 11: Pod 启动与 Sidecar 容器结构
图 11: Pod 启动与 Sidecar 容器结构

Pod 中断管理

Pod Disruption Budget(PDB)限制应用可同时中断的 Pod 数,保障高可用。

图 12: Pod Disruption Budget 示意图
图 12: Pod Disruption Budget 示意图

最佳实践

资源管理

始终为容器指定资源请求与限制,确保合理调度,防止资源争用。

高可用配置

对于关键工作负载,建议:

  • 使用多副本 Deployment
  • 配置 Pod Disruption Budget
  • 配置 Liveness/Readiness 探针
  • 使用 Pod 反亲和性分布副本
  • 跨可用区部署实现地理冗余

扩缩容策略

扩缩容类型控制器适用场景
水平扩缩容HorizontalPodAutoscaler无状态应用、负载波动
垂直扩缩容VerticalPodAutoscaler不能水平扩展的应用
集群扩缩容Cluster Autoscaler整体集群容量自动管理
表 3: Kubernetes 扩缩容类型与场景

Pod 生命周期管理

  • 配置合适的启动、存活、就绪探针
  • 设置 terminationGracePeriodSeconds 实现优雅关闭
  • 应用需正确处理终止信号
  • 使用 Init 容器处理依赖与启动需求
  • 利用 preStop 钩子做清理操作

工作负载控制器选择指南

根据应用需求选择合适的控制器:

图 13: 工作负载控制器选择流程
图 13: 工作负载控制器选择流程

该流程图有助于根据实际需求选择最合适的工作负载控制器。

总结

Kubernetes 工作负载管理体系为应用的部署、扩缩容、高可用和生命周期管理提供了强大支撑。理解各类控制器的适用场景与特性,合理配置探针、资源和中断预算,是保障集群稳定与业务连续性的关键。通过最佳实践,用户可实现高效、自动化的工作负载运维管理。

文章导航

章节内容

这是章节的内容页面。

章节概览

评论区