Skip to main content
Version: v25.06

工作负载

特性介绍

工作负载是在Kubernetes上用于描述业务的运行载体,以一组Pod的形式在Kubernetes中运行。工作负载包括Deployment、Statefulset、Daemonset、Job、CronJob等多种类型。openFuyao提供基于Kubernetes原生类型的容器部署和管理能力,支持容器工作负载部署、配置、卸载等生命周期管理。

应用场景

用户在部署应用时,会使用工作负载相关容器进行承载,具体有以下应用场景。

  • 无状态应用:如Web服务、API服务、微服务等。这些应用不需要持久化存储和特定的启动顺序,适合使用Deployment进行管理,支持自动扩展和滚动更新。
  • 有状态应用:如数据库、分布式缓存、消息队列等。这些应用通常需要持久化数据存储和唯一的Pod标识,适合使用StatefulSet管理。
  • 周期性任务:如定期数据清理、备份任务。可以使用CronJob定期调度任务,确保在指定时间间隔自动执行任务。
  • 一次性任务或批处理任务:如数据处理、分析等一次性任务。使用Job可以确保任务成功执行一次并终止。
  • 节点级应用:如日志收集器、监控代理等。使用DaemonSet可以确保每个节点都运行一个Pod实例,适合需要在集群每个节点上部署的服务。

输入图片说明说明:

  • openFuyao平台不对用户通过YAML方式创建/修改资源的内容进行校验,请用户确保资源定义YAML中内容的安全性。
  • 用户应用中的敏感信息需要自行保障安全使用与存储,openFuyao本身不会对应用中的敏感信息进行扫描、识别、屏蔽等。推荐使用Kubernetes Secret进行存储,并参照Kubernetes静态加密机密数据的指导配置Kubernetes,避免Secret在Etcd数据库中的明文存储。
  • 根据K8s自身机制,应用卸载后,该应用运行过程中在主机存储设备/分布式存储设备上创建的文件/数据不会被强制删除,需用户手动删除,避免存储空间浪费。

能力范围

  • 自动扩展:支持根据资源使用情况自动扩展Pod数量,满足流量变化需求。

  • 生命周期管理:支持工作负载的全生命管理,包括创建、更新、删除、重启等。

  • 高可用性:通过多副本容错机制,确保工作负载的高可用性,适用于生产环境下的应用部署。

  • 资源管理:支持设置资源请求和限制,以控制每个Pod的资源使用情况,优化集群资源分配。

亮点特征

  • 多种工作负载类型:提供给多种工作负载类型(如Deployment、StatefulSet、Job等),可以灵活选择适合的类型以满足不同场景的需求。

  • 自动化运维:提供自动扩展、健康检查、自愈等功能,减轻运维负担。

  • 支持声明式配置:用户可以通过声明式YAML配置文件定义工作负载的期望状态,Kubernetes会自动调整使集群状态符合期望。

  • 高可扩展性:支持从小规模到大规模集群的应用部署和管理,适合企业级环境。

实现原理

Kubernetes工作负载的实现基于控制器模式。

  • 声明式配置:用户通过YAML配置文件或kubectl命令声明工作负载的期望状态,定义副本数量、资源请求等。

  • 控制器管理:控制器(如Deployment控制器)会不断检测工作负载的实际状态与期望状态的差异。如果Pod的数量或状态与期望不符,控制器会进行自动调整。

  • 自动调度:Kubernetes的调度器根据资源需求和节点状态将工作负载分配到合适的节点。调度器会优先选择满足资源请求的节点,并考虑亲和性、反亲和性等约束条件。

  • 自愈机制:如果Pod异常退出或节点失效,控制器会自动创建新的Pod副本,确保工作负载的可用性。

  • 状态更新:对于支持滚动更新的工作负载(如Deployment),控制器会逐步更新Pod,确保更新过程中的服务不中断。如果更新失败,支持自动回滚到先前的版本。

与相关特性的关系

  • Service:工作负载通常通过Service暴露对外的访问接口,实现负载均衡和服务发现。Service提供了稳定的IP和DNS名称,便于应用之间的通信。

  • ConfigMap和Secret:工作负载可以通过ConfigMap和Secret挂载配置文件或敏感数据,支持动态加载配置。如Deployment可以引用ConfigMap来读取应用配置,Secret用于存储密码或认证信息。

  • Volume和PersistentVolume:有状态工作负载(如StatefulSet)通常需要持久化存储,使用Volume或PersistentVolume可以在Pod重启后保持数据不丢失。

  • 资源配额和限制:工作负载的资源请求和限制可以通过Kubernetes的资源管理机制控制,以确保集群资源的合理分配和使用效率。

使用Pod

Pod是Kuberntes创建或部署的最小单位。一个Pod封装一个或多个容器(container)、存储资源(volume)、一个独立的网络IP地址以及管理控制容器运行方式的策略选项。

在openFuyao平台界面的左侧导航栏“资源管理”中选择“工作负载 > Pod”,进入“Pod”界面。

创建Pod

前提条件

  • 节点资源充足:确保集群中的节点有足够的资源(CPU、内存)来运行新建的Pod。

  • 网络和存储配置:如果Pod依赖于存储卷或特定的网络配置,需要提前配置相应的存储和网络插件。

  • 权限要求:用户需要具备在指定命名空间中创建Pod的权限,通常通过RBAC授予create权限。

背景信息

Pod是Kubernetes中的基础工作负载单元,通常有控制器(如Deployment、StatefulSet等)管理。创建Pod是将应用部署到Kubernetes集群中的第一步,Pod可以通过配置文件定义镜像、资源请求、环境变量、存储卷等信息。直接创建Pod通常用于临时任务或调试场景,正式应用推荐使用控制器管理Pod的生命周期。

使用限制

  • 生命周期限制:Pod的生命周期是不可变的,Pod一旦终止或被删除,无法重启或恢复。需要持久运行的应用应该使用控制器管理。
  • 存储限制:Pod本地存储是临时的,Pod重启后数据会丢失,如果需要持久化数据,应挂载持久卷(Persistent Volume)。
  • 命名空间隔离:Pod是命名空间级资源,不同命名空间中的Pod互相隔离,无法直接通信。

操作步骤

  1. 单击“创建”,进入YAML“创建”界面。

  2. 编辑YAML。

  3. 单击“确定”完成创建。

输入图片说明说明:

Kubernetes集群中的各节点上能运行的pod数量受限,默认为110个,所有节点上的Pod均达到限制数量后,新的待创建pod将无法调度一直处于pending状态,请及时清理或扩容节点。因为Kubernetes没有限制pending状态Pod数量的机制,所以用户需要及时关注,避免pending状态的pod无限增加,消耗系统CPU与内存资源,最终影响集群的正常响应。

相关操作

您可以在列表页面查看Pod的列表信息或者单击Pod名称查看Pod详情,您还可以单击操作列输入图片说明或在详情页面单击右上角的“操作”,按需删除Pod。

后续操作

您可以参考“使用Pod”的相关操作步骤使用其他工作负载资源,如Deployment、StatefulSet、DaemonSet、Job、以及CronJob的创建、查看、修改、删除的操作。