跳到正文
复制成功
请遵守本站许可
报告
章节_文章 // 现场报告

文章编号: RL-KUBERNET

2026.09.19

Kubernetes 工作负载类型与控制器职责

Chavy
Chavy
#Kubernetes#工作负载#控制器
档案

摘要:梳理 Pod、Deployment、StatefulSet、DaemonSet、Job 与 CronJob 的职责、管理关系和选型场景,建立 Kubernetes 工作负载的整体认识。

这一部分是 CKA 考试的核心内容之一,也是 Kubernetes 实际生产环境中最重要的知识模块。

一、Workloads 工作负载概述#

1. 什么是 Workloads?#

Workloads(工作负载)是 Kubernetes 中用于管理应用程序运行的 API 资源。

简单来说:

  • Pod 负责运行容器。
  • Deployment 负责管理无状态应用。
  • StatefulSet 负责管理有状态应用。
  • DaemonSet 负责让每个符合条件的节点运行指定 Pod。
  • Job 负责执行一次性任务。
  • CronJob 负责定时执行任务。

例如,我们部署一个 Web 应用:

flowchart TB
    N0["用户请求"]
    N1["Kubernetes Service"]
    N2["Deployment"]
    N3["ReplicaSet"]
    N4["Pod"]
    N5["Pod"]
    N6["Pod"]
    N7["Container"]
    N8["Container"]
    N9["Container"]
    N0 --> N1
    N2 -.->|"管理"| N3
    N1 -->|"请求"| N4
    N1 -->|"请求"| N5
    N1 -->|"请求"| N6
    N3 -.->|"管理"| N4
    N3 -.->|"管理"| N5
    N3 -.->|"管理"| N6
    N4 --> N7
    N5 --> N8
    N6 --> N9

这里有一个重要概念:

Workload Controller(工作负载控制器)通过持续监听集群状态,使实际运行状态不断趋近于用户声明的期望状态。

例如:

你希望始终运行 3 个 Nginx Pod。

PRTCL // YAML
replicas: 3

如果其中一个 Pod 意外退出,控制器会发现:

flowchart TB
    N0["期望状态:3 个 Pod<br/>实际状态:2 个 Pod"]
    N1["控制器发现状态不一致"]
    N2["创建新的 Pod"]
    N3["恢复到 3 个 Pod"]
    N0 --> N1
    N1 --> N2
    N2 --> N3

这就是 Kubernetes 的声明式管理和控制器协调机制。


2. Kubernetes Workloads 核心资源#

Kubernetes 主要有以下六种工作负载资源:

1. Pod

基础运行单元 Kubernetes 中最小的可部署计算单元。

2. Deployment

无状态应用 管理 ReplicaSet,实现副本控制、滚动更新和回滚。

3. StatefulSet

有状态应用 管理具有稳定身份标识和持久化存储需求的应用。

4. DaemonSet

节点级运行 在所有或指定节点上运行一个 Pod 副本。

5. Job

一次性任务 确保指定数量的任务 Pod 成功完成。

6. CronJob

定时任务 按照 Cron 时间表达式周期性创建 Job。

此外,还有 ReplicaSet,它主要负责维护 Pod 副本数量,通常由 Deployment 管理。

3. 六种工作负载的区别#

这是 CKA 必须掌握的知识点。

资源主要用途典型应用
Pod运行容器单个应用实例
Deployment无状态应用Nginx、Web 服务
StatefulSet有状态应用MySQL、Redis 集群
DaemonSet节点级应用日志采集、监控 Agent
Job一次性任务数据迁移、批量计算
CronJob定时任务定时备份、定时清理

重点理解:无状态与有状态#

无状态应用(Stateless)

应用实例之间没有必须保持的本地身份或持久化状态。

例如:

PRTCL // TEXT
Web 应用
Pod-1
Pod-2
Pod-3

三个 Pod 可以互相替换。Pod-1 挂掉后,重新创建一个 Pod 即可。

因此通常使用 Deployment。

有状态应用(Stateful)

应用实例需要保持稳定的身份标识、网络标识或持久化数据。

例如:

PRTCL // TEXT
MySQL 集群
mysql-0
mysql-1
mysql-2

每个 Pod 都有稳定的名称,并且可以关联独立的持久化存储。

因此通常使用 StatefulSet。


4. Workloads 控制器之间的管理关系#

需要特别注意:这些资源并不是完全独立的。

flowchart TB
    N0["Kubernetes"]
    N1["Workload Controllers"]
    N2["Deployment"]
    N3["StatefulSet"]
    N4["DaemonSet"]
    N5["Job"]
    N6["CronJob"]
    N7["ReplicaSet"]
    N8["Pod"]
    N9["Pod"]
    N10["Pod"]
    N11["Pod"]
    N12["Job"]
    N13["Pod"]
    N0 --> N1
    N1 --> N2
    N1 --> N3
    N1 --> N4
    N1 --> N5
    N1 --> N6
    N2 --> N7
    N7 --> N8
    N3 --> N9
    N4 --> N10
    N5 --> N11
    N6 --> N12
    N12 --> N13

理解这张图需要记住:

  1. Deployment 通常通过 ReplicaSet 管理 Pod。
  2. StatefulSet 直接管理 Pod。
  3. DaemonSet 直接管理 Pod。
  4. Job 负责管理执行任务的 Pod。
  5. CronJob 负责按照计划创建 Job。

常用命令#

查看工作负载:

PRTCL // BASH
Terminal window
kubectl get pods
kubectl get deployments
kubectl get replicasets
kubectl get statefulsets
kubectl get daemonsets
kubectl get jobs
kubectl get cronjobs

查看所有工作负载相关资源:

PRTCL // BASH
Terminal window
kubectl get pods,deploy,rs,sts,ds,job,cronjob

查看资源详细信息:

PRTCL // BASH
Terminal window
kubectl describe deployment nginx

查看 YAML:

PRTCL // BASH
Terminal window
kubectl get deployment nginx -o yaml

查看集群中支持的 API 资源:

PRTCL // BASH
Terminal window
kubectl api-resources
归档于 2026.09.19
// 档案结束
Classified
章节_06
协议编号: CC-BY-NC-SA-4.0

Kubernetes 工作负载类型与控制器职责

作者:Chavy发布日期:2026.09.19

基于 CC BY-NC-SA 4.0

© 2026 Chavy
Powered by Astro