工作负载管理

Kubernetes 提供了多种内置 API,用于声明式地管理你的工作负载及其组件。

最终,你的应用程序作为容器运行在Pod 内;然而,单独管理 Pod 会非常费力。例如,如果一个 Pod 失败,你可能希望运行一个新 Pod 来替换它。Kubernetes 可以为你完成这项工作。

你使用 Kubernetes API 创建一个工作负载对象,该对象代表比 Pod 更高的抽象级别,然后 Kubernetes 控制平面根据你定义的工作负载对象的规范,自动为你管理 Pod 对象。

用于管理工作负载的内置 API 包括:

Deployment(以及间接的ReplicaSet),是在集群上运行应用程序最常见的方式。Deployment 非常适合管理集群上的无状态应用程序工作负载,其中 Deployment 中的任何 Pod 都是可互换的,并且可以在需要时进行替换。(Deployment 替代了旧版ReplicationController API)。

StatefulSet 允许你管理一个或多个 Pod——所有 Pod 都运行相同的应用程序代码——其中 Pod 依赖于具有独特的身份。这与 Deployment 不同,在 Deployment 中,Pod 预计是可互换的。StatefulSet 最常见的用途是能够在其 Pod 及其持久存储之间建立链接。例如,你可以运行一个 StatefulSet,将每个 Pod 与一个PersistentVolume 关联起来。如果 StatefulSet 中的一个 Pod 失败,Kubernetes 会创建一个连接到同一个 PersistentVolume 的替代 Pod。

DaemonSet 定义了为特定节点提供本地功能的 Pod;例如,一个驱动程序,允许该节点上的容器访问存储系统。当驱动程序或其他节点级服务必须在它有用的节点上运行时,你就可以使用 DaemonSet。DaemonSet 中的每个 Pod 都扮演着类似于经典 Unix/POSIX 服务器上的系统守护进程的角色。DaemonSet 可能对集群的运行至关重要,例如一个允许该节点访问集群网络的插件,它可能有助于你管理节点,或者它可能提供一些不那么重要的设施,以增强你正在运行的容器平台。你可以在集群中的每个节点上运行 DaemonSet(及其 Pod),也可以只在子集上运行(例如,只在安装了 GPU 的节点上安装 GPU 加速器驱动程序)。

你可以使用Job 和/或CronJob 来定义运行完成然后停止的任务。Job 代表一次性任务,而 CronJob 则根据计划重复执行。

本节中的其他主题

上次修改于 2024 年 1 月 14 日下午 2:20 PST:重命名概念部分 (6160a5e137)