# 工作负载管理

LLMS index: [llms.txt](/llms.txt)

---

<!--
title: "Workload Management"
weight: 20
simple_list: true
-->

<!--
Kubernetes provides several built-in APIs for declarative management of your
<a class='glossary-tooltip' title='工作负载是在 Kubernetes 上运行的应用。' data-bs-toggle='tooltip' data-bs-placement='top' href='/zh-cn/docs/concepts/workloads/' target='_blank' aria-label='workloads'>workloads</a>
and the components of those workloads.
-->
Kubernetes 提供了几个内置的 API
来声明式管理<a class='glossary-tooltip' title='工作负载是在 Kubernetes 上运行的应用。' data-bs-toggle='tooltip' data-bs-placement='top' href='/zh-cn/docs/concepts/workloads/' target='_blank' aria-label='工作负载'>工作负载</a>及其组件。

<!--
Ultimately, your applications run as containers inside
<a class='glossary-tooltip' title='Pod 表示你的集群上一组正在运行的容器。' data-bs-toggle='tooltip' data-bs-placement='top' href='/zh-cn/docs/concepts/workloads/pods/' target='_blank' aria-label='Pods'>Pods</a>; however, managing individual
Pods would be a lot of effort. For example, if a Pod fails, you probably want to
run a new Pod to replace it. Kubernetes can do that for you.
-->
最终，你的应用以容器的形式在 <a class='glossary-tooltip' title='Pod 表示你的集群上一组正在运行的容器。' data-bs-toggle='tooltip' data-bs-placement='top' href='/zh-cn/docs/concepts/workloads/pods/' target='_blank' aria-label='Pods'>Pods</a> 中运行；
但是，直接管理单个 Pod 的工作量将会非常繁琐。例如，如果一个 Pod 失败了，你可能希望运行一个新的
Pod 来替换它。Kubernetes 可以为你完成这些操作。

<!--
You use the Kubernetes API to create workload
<a class='glossary-tooltip' title='Kubernetes 系统中的实体，代表了集群的部分状态。' data-bs-toggle='tooltip' data-bs-placement='top' href='/zh-cn/docs/concepts/overview/working-with-objects/#kubernetes-objects' target='_blank' aria-label='object'>object</a> that represent a higher level
abstraction than a Pod, and then the Kubernetes
<a class='glossary-tooltip' title='控制平面是指容器编排层，它暴露 API 和接口来定义、部署容器和管理容器的生命周期。' data-bs-toggle='tooltip' data-bs-placement='top' href='/zh-cn/docs/reference/glossary/?all=true#term-control-plane' target='_blank' aria-label='control plane'>control plane</a> automatically manages
Pod objects on your behalf, based on the specification for the workload object you defined.
-->
你可以使用 Kubernetes API 创建工作负载<a class='glossary-tooltip' title='Kubernetes 系统中的实体，代表了集群的部分状态。' data-bs-toggle='tooltip' data-bs-placement='top' href='/zh-cn/docs/concepts/overview/working-with-objects/#kubernetes-objects' target='_blank' aria-label='对象'>对象</a>，
这些对象所表达的是比 Pod 更高级别的抽象概念，Kubernetes
<a class='glossary-tooltip' title='控制平面是指容器编排层，它暴露 API 和接口来定义、部署容器和管理容器的生命周期。' data-bs-toggle='tooltip' data-bs-placement='top' href='/zh-cn/docs/reference/glossary/?all=true#term-control-plane' target='_blank' aria-label='控制平面'>控制平面</a>根据你定义的工作负载对象规约自动管理 Pod 对象。

<!--
The built-in APIs for managing workloads are:
-->
用于管理工作负载的内置 API 包括：

<!--
[Deployment](/docs/concepts/workloads/controllers/deployment/) (and, indirectly, [ReplicaSet](/docs/concepts/workloads/controllers/replicaset/)),
the most common way to run an application on your cluster.
Deployment is a good fit for managing a stateless application workload on your cluster, where
any Pod in the Deployment is interchangeable and can be replaced if needed.
(Deployments are a replacement for the legacy
<a class='glossary-tooltip' title='一种管理多副本应用的（已弃用）的 API 对象。' data-bs-toggle='tooltip' data-bs-placement='top' href='/zh-cn/docs/reference/glossary/?all=true#term-replication-controller' target='_blank' aria-label='ReplicationController'>ReplicationController</a> API).
-->
[Deployment](/zh-cn/docs/concepts/workloads/controllers/deployment/)
（也间接包括 [ReplicaSet](/zh-cn/docs/concepts/workloads/controllers/replicaset/)）
是在集群上运行应用的最常见方式。Deployment 适合在集群上管理无状态应用工作负载，
其中 Deployment 中的任何 Pod 都是可互换的，可以在需要时进行替换。
（Deployment 替代原来的 <a class='glossary-tooltip' title='一种管理多副本应用的（已弃用）的 API 对象。' data-bs-toggle='tooltip' data-bs-placement='top' href='/zh-cn/docs/reference/glossary/?all=true#term-replication-controller' target='_blank' aria-label='ReplicationController'>ReplicationController</a> API）。

<!--
A [StatefulSet](/docs/concepts/workloads/controllers/statefulset/) lets you
manage one or more Pods – all running the same application code – where the Pods rely
on having a distinct identity. This is different from a Deployment where the Pods are
expected to be interchangeable.
The most common use for a StatefulSet is to be able to make a link between its Pods and
their persistent storage. For example, you can run a StatefulSet that associates each Pod
with a [PersistentVolume](/docs/concepts/storage/persistent-volumes/). If one of the Pods
in the StatefulSet fails, Kubernetes makes a replacement Pod that is connected to the
same PersistentVolume.
-->
[StatefulSet](/zh-cn/docs/concepts/workloads/controllers/statefulset/)
允许你管理一个或多个运行相同应用代码、但具有不同身份标识的 Pod。
StatefulSet 与 Deployment 不同。Deployment 中的 Pod 预期是可互换的。
StatefulSet 最常见的用途是能够建立其 Pod 与其持久化存储之间的关联。
例如，你可以运行一个将每个 Pod 关联到 [PersistentVolume](/zh-cn/docs/concepts/storage/persistent-volumes/)
的 StatefulSet。如果该 StatefulSet 中的一个 Pod 失败了，Kubernetes 将创建一个新的 Pod，
并连接到相同的 PersistentVolume。

<!--
A [DaemonSet](/docs/concepts/workloads/controllers/daemonset/) defines Pods that provide
facilities that are local to a specific <a class='glossary-tooltip' title='Kubernetes 中的工作机器称作节点。' data-bs-toggle='tooltip' data-bs-placement='top' href='/zh-cn/docs/concepts/architecture/nodes/' target='_blank' aria-label='node'>node</a>;
for example, a driver that lets containers on that node access a storage system. You use a DaemonSet
when the driver, or other node-level service, has to run on the node where it's useful.
Each Pod in a DaemonSet performs a role similar to a system daemon on a classic Unix / POSIX
server.
A DaemonSet might be fundamental to the operation of your cluster,
such as a plugin to let that node access
[cluster networking](/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-network-model),
it might help you to manage the node,
or it could provide less essential facilities that enhance the container platform you are running.
You can run DaemonSets (and their pods) across every node in your cluster, or across just a subset (for example,
only install the GPU accelerator driver on nodes that have a GPU installed).
-->
[DaemonSet](/zh-cn/docs/concepts/workloads/controllers/daemonset/)
定义了在特定<a class='glossary-tooltip' title='Kubernetes 中的工作机器称作节点。' data-bs-toggle='tooltip' data-bs-placement='top' href='/zh-cn/docs/concepts/architecture/nodes/' target='_blank' aria-label='节点'>节点</a>上提供本地设施的 Pod，
例如允许该节点上的容器访问存储系统的驱动。当必须在合适的节点上运行某种驱动或其他节点级别的服务时，
你可以使用 DaemonSet。DaemonSet 中的每个 Pod 执行类似于经典 Unix / POSIX
服务器上的系统守护进程的角色。DaemonSet 可能对集群的操作至关重要，
例如作为插件让该节点访问[集群网络](/zh-cn/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-network-model)，
也可能帮助你管理节点，或者提供增强正在运行的容器平台所需的、不太重要的设施。
你可以在集群的每个节点上运行 DaemonSets（及其 Pod），或者仅在某个子集上运行
（例如，只在安装了 GPU 的节点上安装 GPU 加速驱动）。

<!--
You can use a [Job](/docs/concepts/workloads/controllers/job/) and / or
a [CronJob](/docs/concepts/workloads/controllers/cron-jobs/) to
define tasks that run to completion and then stop. A Job represents a one-off task,
whereas each CronJob repeats according to a schedule.
-->
你可以使用 [Job](/zh-cn/docs/concepts/workloads/controllers/job/) 和/或
[CronJob](/zh-cn/docs/concepts/workloads/controllers/cron-jobs/) 定义一次性任务和定时任务。
Job 表示一次性任务，而每个 CronJob 可以根据排期表重复执行。

<!--
Other topics in this section:
-->
本节中的其他主题：
<!-- relies on simple_list: true in the front matter -->

---

Section pages:

- [Deployments](/zh-cn/docs/concepts/workloads/controllers/deployment/): Deployment 用于管理运行一个应用负载的一组 Pod，通常适用于不保持状态的负载。
- [ReplicaSet](/zh-cn/docs/concepts/workloads/controllers/replicaset/): ReplicaSet 的作用是维持在任何给定时间运行的一组稳定的副本 Pod。 通常，你会定义一个 Deployment，并用这个 Deployment 自动管理 ReplicaSet。
- [StatefulSet](/zh-cn/docs/concepts/workloads/controllers/statefulset/): StatefulSet 运行一组 Pod，并为每个 Pod 保留一个稳定的标识。 这可用于管理需要持久化存储或稳定、唯一网络标识的应用。
- [DaemonSet](/zh-cn/docs/concepts/workloads/controllers/daemonset/): DaemonSet 定义了提供节点本地设施的 Pod。这些设施可能对于集群的运行至关重要，例如网络辅助工具，或者作为 add-on 的一部分。
- [Job](/zh-cn/docs/concepts/workloads/controllers/job/): Job 表示一次性任务，运行完成后就会停止。
- [已完成 Job 的自动清理](/zh-cn/docs/concepts/workloads/controllers/ttlafterfinished/): 一种用于清理已完成执行的旧 Job 的 TTL 机制。
- [CronJob](/zh-cn/docs/concepts/workloads/controllers/cron-jobs/): CronJob 通过重复调度启动一次性的 Job。
- [ReplicationController](/zh-cn/docs/concepts/workloads/controllers/replicationcontroller/): 用于管理可水平扩展的工作负载的旧版 API。 被 Deployment 和 ReplicaSet API 取代。
