【AI 总结】Kubernetes 工作负载

Kubernetes 工作负载 | AI 总结

工作负载核心概念

  1. 基本定义:工作负载指在 Kubernetes 上运行的应用程序,最小计算对象是 Pod,Pod 代表集群上处于运行状态的一组容器集合,且遵循预定义的生命周期(如节点故障会导致 Pod 状态变为失败,需重新创建恢复应用)。
  2. 负载资源作用:无需用户直接管理单个 Pod,通过负载资源搭配控制器,确保运行状态的 Pod 类型、数量与用户指定状态一致,减轻运维负担。

为了让你更直观地理解 Kubernetes(K8s)中的 “工作负载(Workloads)”,我们可以把 Kubernetes 集群想象成一家大型自动化工厂

这里的 “工作负载” 其实就是工厂里的各类 “工单” 或 “用工模式”

1. Pod:最基层的 “打工人”

Pod 是 K8s 里最小的活。你可以把它看作是一个工位(或者一小组紧密协作的员工)。

  • 特点:员工(容器)可能会生病、离职(崩溃、重启)。在 K8s 里,Pod 是 “不持久” 的,一旦工位撤了,里面的东西就没了。

2. 工作负载资源:各种 “部门经理”

如果让你亲手去管理成千上万个 “打工人(Pod)”,你肯定会累死。所以 K8s 提供了几种 “经理”(负载资源)来帮你管理:

① Deployment(无状态应用经理)—— “流水线工人管理部”

这是最常用的经理。

  • 通俗解释:你需要 10 个搬运工,你只要告诉 Deployment:“给我维持 10 个搬运工”。如果其中一个晕倒了,Deployment 会立刻招个新的补上。
  • 关键点:所有的搬运工都是一模一样的,谁替代谁都行(这就是 “无状态”)。

② StatefulSet(有状态应用经理)—— “专家组管理部”

  • 通俗解释:这组员工每个人的任务都不同。比如 1 号是财务,2 号是技术,3 号是前台。
  • 关键点:如果 1 号财务离职了,新招的人必须继承 1 号的账本和工位,不能乱套(这就是 “有状态”,适合数据库等应用)。

③ DaemonSet(守护进程经理)—— “保洁 / 安保部”

  • 通俗解释:这类工作比较特殊,要求每一层楼(每一个节点)都必须配一个
  • 关键点:只要工厂扩建了一层楼,DaemonSet 就会自动在那层楼派驻一名保洁。

④ Job / CronJob(临时工经理)—— “项目承包商”

  • Job:干完就走。比如 “把这堆废纸粉碎了”,干完这活,这个 Pod 就结束使命了。
  • CronJob:定时来干。比如 “每周五下午大扫除”。

总结一下 line 13 的核心逻辑:

  1. 你是老板:你不需要直接找 “打工人”(Pod),你只需要下达 “用工需求”(定义工作负载资源)。
  2. K8s 是全能管家:它负责盯着这些 “经理”。
  3. 结果:无论工厂发生什么意外(比如某台服务器坏了),K8s 都会按照你的 “工单” 要求,自动重新安排打工人,保证你的业务(工厂)永远在正常运转。

用一句话说:工作负载就是你告诉 K8s “我想让什么样的程序、运行几个、怎么运行” 的说明书。

“工作负载”(Workload)本身确实是一个逻辑上的概念,而不是一个单一的、具体的 “东西”。

为了让你理解得更透彻,可以从以下两个维度来看:

1. 概念层面:它是 “应用的运行状态”

在 Kubernetes 的语境下,工作负载是指 “你正在集群上运行的应用程序”。

  • 它描述的是一种意图:你想让什么程序运行、跑几个副本、遇到故障怎么处理。
  • 就像文中的比喻,它更像是一份 “工单” 或 “说明书”

2. 实体层面:它由 “资源对象” 来承载

虽然 “工作负载” 是概念,但它是通过具体的 API 实体(实体对象) 来实现的。在 K8s 中,这些实体被称为工作负载资源(Workload Resources)

当你实际操作时,你会接触到这些看得见、摸得着的实体:

  • Pod:这是最基础的实体(真正的 “打工人” 容器)。
  • Deployment:这是一个高级实体(经理),它负责管理 Pod。
  • StatefulSet、Job、DaemonSet:这些也都是不同类型的实体,用来满足不同的运行需求。

总结

  • 工作负载(Workload) = “我想让应用怎么运行” 的概念 / 分类
  • 工作负载资源(Resources) = 你在终端里通过 kubectl get deployment 查看到的具体实体

所以,当你提到 “我的工作负载出问题了” 时,本质上是指你通过 Deployment 或 StatefulSet 定义的那个应用运行状态不符合预期了。

我们抛开那些虚无缥缈的比喻,从 “它在计算机里到底对应什么” 这个极其具体的角度再看一次:

1. 在你的代码编辑器里:它是一个 YAML 文件

当你准备在 K8s 上运行一个程序时,你第一步是写一个文件(比如 app.yaml)。

  • 这个文件就是工作负载的 “定义”
  • 里面写着:kind: Deployment(类型),replicas: 3(跑几个),image: nginx(用什么镜像)。

2. 在 K8s 的数据库(etcd)里:它是一条数据记录

当你执行 kubectl apply -f app.yaml 后:

  • K8s 的数据库里就多了一条 JSON 格式的数据。
  • 这条 “数据记录” 就是工作负载在 K8s 内部的实体。
  • 它就像你在数据库里插入的一行 INSERT INTO workloads ...。只要这行数据在,K8s 的后台程序就会永远盯着它。

3. 在服务器的进程里:它表现为一组容器

K8s 看到数据库里有了这条记录,就会去对应的服务器(Node)上指挥 Docker 或 Containerd:“喂,帮我启动 3 个进程!”

  • 这些正在运行的进程(容器)就是工作负载的 “表现形式”。

用一个最土的例子对比:

  • 传统方式: 你登录服务器,敲命令 nohup ./my-app &

    • 它是啥? 它就是一个孤立的进程。你关了终端,它可能还在跑;它要是崩了,就没人管了。
  • K8s 方式: 你提交一个 Deployment(工作负载资源)。

    • 它是啥? 它是一个 “自动化的运行方案”
    • 如果你把跑出来的进程(Pod)杀了,K8s 看到数据库里的 “运行方案” 说要 3 个,它会立刻再启动一个新的。

最终结论

如果非要给它下一个定义:

工作负载 = “你提交给 K8s 的那份运行方案” + “K8s 根据方案帮你维持的一组进程”。

它不是一个单一的二进制文件,也不是一个硬件,它是 “一份持久化的心愿单” 加上 “为了实现这个心愿而跑起来的一堆容器”

如果你能看到 K8s 的后台,你会发现它其实就是:

  1. 存了一行配置信息。
  2. 跑了一个死循环(不断检查:配置说要 3 个,现在有几个?少了就补,多了就删)。

你现在能感受到它在 “数据” 和 “进程” 之间的关系了吗?

内置工作负载资源类型

资源类型 适用场景 核心特点
Deployment 与 ReplicaSet(替代 ReplicationController) 管理无状态应用 所有 Pod 等价,可按需替换
StatefulSet 运行需跟踪状态的应用(如数据持久存储场景) 每个 Pod 可与 PersistentVolume 对应,Pod 内代码可实现数据复制以提升可靠性
DaemonSet 定义节点本地支撑设施 Pod(如网络辅助工具、网络插件) 新节点符合规约时,控制平面自动调度 Pod 到该节点运行
Job 执行一次性任务 任务运行结束后停止,完成即视为任务结束
CronJob 按排期表多次运行任务 基于时间规则重复执行同一 Job

第三方工作负载扩展

借助定制资源定义(CRD),可添加第三方工作负载资源,实现 Kubernetes 核心功能未覆盖的需求,例如运行需所有 Pod 可用才执行操作的高吞吐量分布式任务。


【AI 总结】Kubernetes 工作负载
https://blog.lllllan.cn/k8s/concepts/workloads/
作者
lllllan
发布于
2026年1月8日
许可协议