工作负载管理

Kubernetes 提供了几个内置 API,用于以声明方式管理你的工作负载以及这些工作负载的组件。

最终,你的应用程序作为容器在Pod内部运行;但是,管理单个 Pod 将会非常费力。例如,如果一个 Pod 失败,你可能需要运行一个新的 Pod 来替换它。 Kubernetes 可以为你做到这一点。

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

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

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

StatefulSet 允许你管理一个或多个 Pod(全部运行相同的应用程序代码),其中 Pod 依赖于具有不同的身份。这与 Deployment 不同,在 Deployment 中,Pod 应该是可互换的。StatefulSet 的最常见用途是能够将其 Pod 与其持久存储之间建立链接。例如,你可以运行一个将每个 Pod 与一个 PersistentVolume 相关联的 StatefulSet。如果 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)