You need to enable JavaScript to run this app.
导航

工作负载概述

最近更新时间2023.02.20 11:50:08

首次发布时间2022.03.04 23:10:38

在 Kubernetes 中,工作负载是对一组容器组(Pod)的抽象模型,用于描述业务的运行载体,包括无状态工作负载(Deployment)、有状态工作负载(Statefulset)、守护进程(Daemonset)、任务(Job)、定时任务(CronJob) 等。工作负载也被称为 Pod 控制器,用来确保符合期望类型和个数的 Pod 正常运行。容器服务 VKE 基于 Kubernetes 原生能力,支持管理容器工作负载的全生命周期。

容器组和工作负载

容器组(Pod)是在 Kubernetes 中可部署的最小的计算单元。一个 Pod 封装一个或多个容器(container)、存储资源(Volume)、一个独立的网络 IP 以及管理控制容器运行方式的策略选项。

工作负载用于管理 Pod 实例。一个工作负载支持管理一个或多个 Pod,支持 Pod 多版本管理、滚动升级和自动恢复能力。通过工作负载使用 Pod Template 创建符合业务需要的 Pod。

无状态工作负载

一个无状态工作负载(Deployment)可以包含一个或多个 Pod 副本,每个 Pod 副本的角色相同,系统会自动为 Deployment 的多个Pod 副本分发请求。

Deployment 集成了上线部署、滚动升级、创建副本、恢复上线的功能,在某种程度上,Deployment 实现无人值守的上线,大大降低了上线过程的复杂性和操作风险。Deployment 常用来部署无状态应用实现快速的伸缩,相较于有状态服务,实例数量可以灵活伸缩。

有状态工作负载

和无状态工作负载类似,有状态工作负载(Statefulset)支持管理应用的部署和扩缩容。另外,有状态工作负载(Statefulset)还支持为 Pod 提供持久化存储和稳定的网络标志,以实现数据库、缓存等有状态服务的部署。

守护进程

守护进程(DaemonSet) 确保全部(或者某些)节点上运行一个 Pod。当有新节点加入集群时,会为新节点新增一个 Pod。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。DaemonSet 跟节点相关,如果节点异常,也不会在其他节点重新创建。

DaemonSet 适合日志收集、资源监控这类的系统层面的基础应用。这类应用需要每个节点都运行,且不需要太多实例。

任务和定时任务

任务(Job)和定时任务(CronJob)是负责批量处理短暂的一次性任务(short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束。任务和定时任务适合持续集成这类一次性的任务。

  • Job:Job 是 Kubernetes 用来控制批处理型任务的资源对象。Job 管理的 Pod 根据用户的设置把任务成功完成就自动退出(Pod自动删除)。
  • CronJob:CronJob 是基于时间的 Job,类似于 Linux 系统的 Crontab 文件中的一行,在指定的时间周期运行指定的 Job。

工作负载生命周期说明

状态说明
运行中所有实例都处于运行中才是运行中。
未就绪容器处于异常、实例数为 0 或 Pending 状态时显示此状态。
升级/回滚中触发升级或回滚动作后,工作负载会处于升级/回滚中。
可用当多实例无状态工作负载运行过程中部分实例异常,可用实例不为 0,工作负载会处于可用状态。
执行完成任务执行完成,仅普通任务存在该状态。
已停止触发停止操作后,工作负载会处于停止状态,实例数变为 0。v1.13 之前的版本存在此状态。
删除中触发删除操作后,工作负载会处于删除中状态。
暂停中触发暂停操作后,工作负载会处于暂停中状态。