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 与持久存储之间建立链接。例如,你可以运行一个 StatefulSet,将每个 Pod 与一个 PersistentVolume 相关联。如果 StatefulSet 中的某个 Pod 失败,Kubernetes 会创建一个连接到相同 PersistentVolume 的替换 Pod。
DaemonSet 定义了提供特定节点本地功能的 Pod;例如,让该节点上的容器访问存储系统的驱动程序。当驱动程序或其他节点级服务需要在其有用的节点上运行时,你可以使用 DaemonSet。DaemonSet 中的每个 Pod 执行的角色类似于经典 Unix/POSIX 服务器上的系统守护进程。DaemonSet 可能对集群的操作至关重要,例如允许该节点访问 集群网络 的插件,它可能帮助你管理节点,或者提供增强你正在运行的容器平台的非必要功能。你可以在集群中的每个节点上运行 DaemonSet(及其 Pod),或者仅在部分节点上运行(例如,仅在安装了 GPU 的节点上安装 GPU 加速器驱动程序)。
你可以使用 Job 和/或 CronJob 来定义运行至完成然后停止的任务。Job 代表一次性任务,而 CronJob 则根据计划重复执行。
本节中的其他主题