pipeline-frameworks-k8s-04.工作负载与资源调度

工作负载(Workload)指一类 Kubernetes API 对象:描述「希望运行哪些 Pod、如何创建与更新它们」。与生信最贴近的常是 Job / CronJob(批处理、定时批);长期在线服务多用 Deployment。本篇把资源类型、requests/limits、以及 Pending 排障串成一条线,并与 k8s-01 图 5 步骤 4~5 对齐。

本系列与编号约定

  • 调度(步骤 4)与 kubelet 执行(步骤 5)的总览见 k8s-01 图 5 与「步骤 1~5 速查表」。
  • 上一篇:k8s-03

系列导航

篇目 链接
上一篇 pipeline-frameworks-k8s-03.kubectl与日常观测
下一篇 pipeline-frameworks-k8s-05.存储网络与权限入门
相关 Argo Workflows 入门

1. 常见工作负载类型(一句话)

资源 典型用途 Pod 生命周期
Deployment 无状态、长期在线、多副本 期望副本数由控制器维持;更新时常用滚动
Job 跑完即成功的批任务 完成 completions 后结束;失败可重试(按 spec)
CronJob 定时触发 Job 按 cron 表达式创建 Job 对象

图 1 控制器与 Pod 的关系(示意)

图 1 Deployment / Job / CronJob 各自通过控制器创建或更新 Pod;调度器为未绑定节点的 Pod 选择节点

ReplicaSet 常被 Deployment 管理,日常不必单独手写。Argo 多步工作流在底层仍会落成 Pod(有时用 Job 语义封装),因此读 Argo 文档时看到「Pod」应直接对应到上图中的执行单元。


2. requests 与 limits:调度、QoS 与 OOM

在 Pod 的容器 spec 里(resources):

  • requests:调度器认为「该容器至少需要」的 CPU/内存,用于 Predicates(能否放到某节点)与 Priorities(打分)。节点上可调度的新 Pod 的 requests 总和不能超过节点 Allocatable(在资源维度上)。
  • limits:运行时上限;内存超过 limit 时,容器可能被 OOMKilled(表现为 CrashLoopBackOffReason: OOMKilled)。

图 2 requests 与 limits 在节点上的直觉

图 2 调度参考 requests;limits 为硬顶,超出内存可能被 OOMKilled

与 HPC「申请核数/内存」类比:requests 像申请量(决定你能不能排进队列);limits 像硬上限(用超了会被杀)。若只设 limits 不设 requests,某些版本/配置下 requests 可能被默认成与 limits 相同,行为因版本与配置而异,生产建议显式写出两者


3. Pending 与排障顺序(与步骤 4、5 对照)

Pod 处于 Pending 通常表示:尚未调度到节点spec.nodeName 仍为空)或调度后仍无法进入运行(较少仍显示 Pending,多数会进 Events)。排查时优先用 kubectl describe pod,看 EventsConditions

图 3 长时间 Pending 时的常见检查方向(示意)

图 3 Pending:先看 describe;常见为资源/污点/亲和性/PVC 未绑定;调度后还有镜像拉取、崩溃等

图 5 的对应关系:

  • 步骤 4:调度器 Bind 之前——资源不足、节点选择器、污点与容忍、亲和性、未绑定的 PVC 等,都会让 Pod 无法完成绑定。
  • 步骤 5:绑定之后——镜像拉取ImagePullBackOff)、启动命令错误、内存 limit 过小导致 OOM,属于 kubelet/CRI/runtime 阶段。

4. 与 Argo 的关系(点到为止)

  • Argo 在 Workflow 里声明步骤镜像与依赖;每个步骤往往对应一个或多个 Pod
  • 你在 Argo UI 里看到的「等待资源」「镜像错误」,落到 K8s 层就是上节的 Pending / ImagePullBackOff 等;用 k8s-03kubectl describe / logs 可交叉验证。

细节仍以 Argo 入门 为准;本篇只固定 K8s 侧的资源与调度语义。


5. 小结

  • Deployment / Job / CronJob 解决「长期服务 vs 批任务 vs 定时批」的差异;底层都落实到 Pod
  • requests 参与调度与 limits 约束运行时;OOM 与 limits 直接相关。
  • Pending 优先看 Events;区分「调度前」(步骤 4)与「节点上」(步骤 5)问题。
  • 下一步k8s-05 介绍卷与 PVC/PV、Service、RBAC——与 Pending 中的 PVC 未绑定、Service 访问、流水线 API 权限直接相关。
-------------本文结束感谢您的阅读-------------