工作负载
工作负载是在 Kubernetes 上运行的应用程序。无论您的工作负载是单个组件还是多个协同工作的组件,在 Kubernetes 上,您都可以在一组 Pod 中运行它。在 Kubernetes 中,Pod 表示集群上的一组正在运行的 容器。
Kubernetes Pod 具有 定义的生命周期。例如,一旦 Pod 在您的集群中运行,那么运行该 Pod 的 节点 出现严重故障意味着该节点上的所有 Pod 都将失败。Kubernetes 将该级别的故障视为最终故障:您需要创建一个新的 Pod 才能恢复,即使该节点后来恢复正常。
但是,为了让生活更轻松,您不需要直接管理每个 Pod。相反,您可以使用代表您管理一组 Pod 的工作负载资源。这些资源配置 控制器,以确保正在运行正确数量的正确类型的 Pod,以匹配您指定的状态。
Kubernetes 提供了几种内置的工作负载资源
- Deployment 和 ReplicaSet(取代了遗留资源 ReplicationController)。Deployment 非常适合管理集群上的无状态应用程序工作负载,其中 Deployment 中的任何 Pod 都是可互换的,并且可以在需要时进行替换。
- StatefulSet 允许您运行一个或多个以某种方式跟踪状态的相关 Pod。例如,如果您的工作负载持久记录数据,则可以运行一个 StatefulSet,将每个 Pod 与一个 PersistentVolume 相匹配。您的代码在该 StatefulSet 的 Pod 中运行,可以将数据复制到同一 StatefulSet 中的其他 Pod,以提高整体弹性。
- DaemonSet 定义了提供节点本地功能的 Pod。每次您向集群添加与 DaemonSet 中的规范匹配的节点时,控制平面都会为该 DaemonSet 在新节点上调度一个 Pod。DaemonSet 中的每个 Pod 执行的任务类似于经典 Unix / POSIX 服务器上的系统守护程序。DaemonSet 可能是集群运行的基础,例如运行 集群网络 的插件,它可以帮助您管理节点,或者它可以提供增强您正在运行的容器平台的可选行为。
- Job 和 CronJob 提供了不同的方法来定义运行到完成然后停止的任务。您可以使用 Job 来定义一个运行到完成的任务,只运行一次。您可以使用 CronJob 根据时间表多次运行同一个 Job。
在更广泛的 Kubernetes 生态系统中,您可以找到提供其他行为的第三方工作负载资源。使用 自定义资源定义,如果您希望获得 Kubernetes 核心部分未提供的特定行为,则可以添加第三方工作负载资源。例如,如果您想为您的应用程序运行一组 Pod,但除非所有 Pod 都可用(可能是为了执行某些高吞吐量的分布式任务),否则停止工作,那么您可以实现或安装一个提供该功能的扩展。
下一步
除了阅读有关工作负载管理的每种 API 类型之外,您还可以阅读如何执行特定任务
- 使用 Deployment 运行无状态应用程序
- 将有状态应用程序作为 单个实例 或 复制集 运行
- 使用 CronJob 运行自动化任务
要了解 Kubernetes 将代码与配置分离的机制,请访问 配置。
有两个支持概念提供了有关 Kubernetes 如何为应用程序管理 Pod 的背景信息
- 垃圾回收 在其所属资源被移除后,从集群中清理对象。
- 完成后生存时间 控制器 会在 Job 完成后的定义时间过后将其移除。
应用程序运行后,您可能希望将其作为 Service 在互联网上可用,或者仅针对 Web 应用程序,使用 Ingress。