K8s不同工作负载对应LOL里哪位英雄
前言
Kubernetes(简称K8s)作为云原生时代必须要掌握的一门技术,其整个体系还是比较庞大的。但是其实用一段时间你就会发现,在整个庞大的K8s体系中,最主要承载承载业务的还是五大工作负载,即Deployment、Daemonset、StatefulSet、Job和CronJob,其余的像service,configmap,pvc都是为这五大工作负载添砖加瓦的。
另外我还发现在K8s体系复杂的同时,同样体系复杂的MOBA游戏《英雄联盟》(简称LOL)却受众广泛,休息时有很多同事都是在看LOL相关的视频。
于是为了帮各位想要入门K8s的“最强王者”更好的理解K8s的核心:五大工作负载,我为各种抽象的K8s工作负载在LOL中找了一个同样表现或者起同样作用的英雄,让各位最强王者能从LOL出发,更好的理解K8s的五大核心工作负载。
🚀 1. Deployment (部署) - 无状态应用的智慧管家
👉 核心功能:
Kubernetes 中最常用、最核心的工作负载。它像一个精明的管家,专门负责部署和管理无状态应用(如Web服务器、API微服务)。它的超能力在于声明式的滚动更新和优雅回滚——只需修改镜像版本,它就能自动、平滑地逐步替换旧Pod实例,万一新版本有问题,一键就能秒回旧版。它还通过副本数(Replicas)设定,确保应用始终有指定数量的健康副本在运行,自动修复“不健康”的Pod,是高可用的基石。
💡典型场景:你的网站前端、RESTful API服务、无状态微服务。
💡对应的LOL英雄:盖伦
- 盖伦是LOL入门会最先接触到的英雄(3个初始免费英雄之一),你可能没玩过沙皇/阿罗拉/厄斐琉斯,但你一定玩过这个“大宝剑”;而Deployment也是几乎所有K8s入门教程都会拿来举例的工作负载,比如拿deployment起一个nginx镜像,而真正用上k8s之后,你也会发现,你的集群里面可能没有Job/CronJob等,但deployment是基本上一定会有的
- 盖伦什么都有,回血、沉默、伤害、强化、AOE、斩杀,Deployment也是什么功能都包含,但它又不是专门为了某一项功能而生的。
🧠 2. StatefulSet (有状态副本集) - 秩序严谨的数据管理者
👉 核心功能:
当你的应用需要持久化数据和稳定标识时(比如数据库、消息队列),StatefulSet就是你的不二之选。它与Deployment的关键区别在于秩序和唯一性。它为每个Pod提供唯一且固定的名称(如mysql-0
, mysql-1
)、稳定的网络标识(DNS记录)以及专有的持久化存储卷。扩缩容(增加或减少副本)时,它会严格遵守顺序,优雅地一个接一个操作,完美保障集群化有状态应用的数据安全和启动顺序。
💡典型场景:MySQL集群、Redis集群、Kafka、ZooKeeper、Etcd。
💡对应的LOL英雄:邪恶小法师 · 维迦
- 核心被动技能是【超凡邪力】,通过用Q技能补刀或击杀英雄,永久性地增加自己的法术强度。这个法强值是他的“状态数据”,会随着时间持久化并不断增长,绝不会因为回城或死亡而重置。Statefulset也是一样,它里面的数据不会随着pod的重启而消失。
🔌 3. DaemonSet (守护进程集) - 每个节点上的忠实哨兵
👉 核心功能:
DaemonSet 确保集群中的每一个节点(或符合标签选择器的节点)上都运行一个你指定的Pod副本。就像一个忠诚的哨兵,节点加入集群时,它会自动部署;节点离开时,它也会自动清理。它非常适合运行那些需要与节点本身深度绑定的基础架构服务,这些服务需要感知节点并为节点提供功能,而不是为用户业务提供服务。
💡典型场景:日志收集代理(Fluentd)、节点监控组件(Node Exporter)、网络插件(Calico)、安全代理。
💡对应的LOL英雄:索拉卡
索拉卡的大招可以给地图上的所有的己方英雄回血,而DaemonSet也是强制在集群中的每个节点都会有一个pod,都主打一个“全局控制”,“雨露均沾”,确保每一个节点都能有一个服务实例在运行。
⏳ 4. Job (任务) - 使命必达的一次性行者
👉 核心功能:
Job 负责创建一个或多个Pod来执行一个一次性的任务(Task),而不是持续运行的服务。它的核心目标是确保任务成功完成。你定义一个任务(比如一个计算脚本),Job会启动Pod去执行,直到Pod内的容器成功退出(Exit Code为0)。如果任务执行失败,Job会根据配置尝试重试。一旦任务成功完成,Job及其创建的Pod就会功成身退,保留记录以供查询。
💡典型场景:执行数据库迁移脚本、运行一次性的数据分析任务、批处理作业。
💡对应的LOL英雄:像劫这样的刺客
LOL里面的刺客不擅长持续输出,他们会等技能齐全和时机成熟时一套技能看能不能切入敌方后排秒杀掉对手的C位,一套技能打完以后,他们会暂时丧失威胁,等下一次CD转好,又是他们伺机而动的时候。Job也是一个道理,等需要它时执行一次,然后就会潜伏,等待下次需要执行的时候才会再次被执行。
⏳ 5. CronJob (定时任务) - 精准的自动化闹钟
👉 核心功能:
CronJob 是基于时间调度的Job,相当于Linux系统中的Crontab。它让你可以用熟悉的Cron语法(如 0 * * * *
)来定义并周期性地运行Job。到了预定时间,CronJob控制器就会自动创建一个新的Job对象来执行任务。它是实现自动化运维和周期性任务的利器,让你彻底从手动执行重复任务中解放出来。
💡典型场景:每天凌晨2点执行数据库备份、每小时发送一次系统健康报告、每周清理一次临时文件。
💡对应的LOL英雄:LOL这个游戏机制本身
LOL在游戏开始后,会在3路定期生成小兵,这些小兵的生成是一开始就设定好的,不会受场上英雄被击杀或者防御塔被拆掉等各种事件的影响而稳定定时运行。CronJob也是一样,不管其它工作负载工作情况怎么样,它都会按照设定好的时间或间隔,周而复始的自动执行。