工作负载是指在 Kubernetes 上运行的应用程序。无论你的应用是由单个组件还是多个协同工作的组件构成,都可以在一组 Pod 中运行。在 Kubernetes 中,Pod 是集群上处于运行状态的一组容器的集合。Kubernetes 提供了多种内置的工作负载资源:
Deployment
适用于管理无状态应用。
所有 Pod 都是相互等价的,并且在需要时可以被替换。
创建此类型负载请参见创建无状态负载(Deployment),旧版本页面请参见创建无状态。
StatefulSet:
用于运行需要跟踪应用状态的 Pod。例如,如果应用需要持久化存储数据,可以使用 StatefulSet 将每个 Pod 与某个 PersistentVolume 对应起来。
Pod 内的代码可以将数据复制到同一 StatefulSet 中的其他 Pod 中,以提高服务的可靠性。
创建此类型负载请参见创建有状态负载(Statefulset),旧版本页面请参见创建有状态。
DaemonSet:
用于定义提供节点本地支撑设施的 Pod。这些 Pod 对于集群的运维非常重要,例如作为网络链接的辅助工具或网络插件的一部分。
每次向集群中添加新节点时,如果该节点与某 DaemonSet 的规约匹配,控制平面会为该 DaemonSet 调度一个 Pod 到新节点上运行。
创建此类型负载请参见创建守护进程(DaemonSet),旧版本页面请参见创建守护进程。
Job 和 CronJob:
Job:定义一次性任务,执行后即视为完成,创建此类型负载请参见创建普通任务(Job),旧版本页面请参见创建任务。
CronJob:根据排期表多次运行同一个 Job,创建此类型负载请参见创建定时任务(CronJob),旧版本页面请参见创建定时任务。
云容器引擎(CCE)提供了基于 Kubernetes 原生类型的容器部署和管理能力,支持容器工作负载的部署、配置、监控、扩容、升级、卸载、服务发现及负载均衡等生命周期管理。
Deployment与StatefulSet的区别
| 对比维度 | Deployment | StatefulSet |
|---|---|---|
| 适用场景 | 适用于无状态应用,如前端 Web 服务、无状态 API 网关、临时计算任务等无需保持状态的服务。 | 适用于有状态应用,如数据库(MySQL、PostgreSQL)、有状态中间件(Kafka、ZooKeeper)、分布式存储集群(Etcd)等需持久状态的应用。 |
| Pod 命名与启动顺序 | Pod 名称由系统随机生成(如 nginx-deploy-7cbb48f9d6-abc12),无固定创建或删除顺序。 | Pod 名称按索引顺序固定(如 mysql-0、mysql-1),严格按索引顺序依次创建(从0开始)和逆序终止。 |
| 存储卷管理 | 通常多个 Pod 共享同一个 PersistentVolumeClaim(PVC),存储数据的一致性需由应用自身保证。 | 通过 VolumeClaimTemplate 为每个 Pod 动态创建独立的 PVC,Pod 重建后仍绑定原存储,保证数据持久性。 |
| 网络标识稳定性 | Pod IP 和 DNS 记录随 Pod 重启或重建而变化,一般通过 Service 以负载均衡方式对外提供服务。 | 每个 Pod 拥有稳定的 DNS 域名(格式:<pod-name>.<svc-name>.<namespace>.svc.cluster.local),IP 可能变化但域名永久有效。 |
| 更新策略 | 支持 RollingUpdate(逐步替换 Pod,新Pod就绪后,旧Pod才会被删除,确保更新过程中始终有Pod提供服务)和 Recreate(全部删除后重建),可结合 ReplicaSet 实现版本回滚。 | 默认采用顺序更新策略(RollingUpdate),按 Pod 索引逐次进行,确保拓扑秩序;也可配置为并行更新。 |
| 服务访问方式 | 通过 ClusterIP 或 LoadBalancer 类型的 Service 统一接入,请求被随机分发到任一后端 Pod。 | 需配合 Headless Service(clusterIP: None)使用,客户端可通过稳定 DNS 直接寻址到特定 Pod。 |
| 扩缩容行为 | 直接调整副本数,新 Pod 无顺序要求,可快速弹性伸缩。 | 扩容时按索引顺序新增 Pod(如先创建 web-2,再 web-3),缩容则按索引逆序终止。 |
| 数据持久化特点 | 适合只读或可共享的存储卷(如 NFS),Pod 销毁后存储卷通常可被其他 Pod 复用。 | 每个 Pod 对应专属存储,Pod 与存储生命周期绑定,适合需要独立数据目录的场景(如数据库主从节点)。 |