【Kubernetes】以LOL的视角打开K8s

前言

对于大部分后端程序员乃至于非后端程序员来说,在当前的云原生时代,Kubernetes(后称K8s)都是绕不开的一项技术;同时,对于这个时代的程序员来说,“英雄联盟”(后称LOL)也是陪伴包括我在内的很多人成长的一款游戏。

在我的工作经历中,常常在组内有小伙伴需要使用到K8s的时候对K8s没有必要的概念,但是我发现和他们聊起LOL却总能找到共同语言,所以我就在想,既然K8s本身的学习曲线不是那么平缓,那么是不是可以借助LOL来帮大家理解什么是K8s呢?

目的

本系列文章的目的是借助LOL,帮大家更好地理解K8s,入门K8s,上手K8s。

设计的内核

每一项产品都有它的一个设计的内核,对于LOL来说,它本质是一款游戏,它的内核就是“通过各种手段,摧毁对方的基地”,不管你是通过兵线运营、击杀对手、控制中立资源,这所有的一切都是围绕最终的目的:摧毁对方的基地,来服务的

那么对于K8s来说,设计的内核就是更好的进行容器的管理(对于什么是容器,不在本文的讨论范围内,可以自行搜索一下),不管是我们创建deployment,service,statefulset,我们最终的目的,都是对容器进行管控,让封装在容器内的应用更好的运行。

LOL的英雄 - K8s的容器

LOL的一局游戏是根据这局游戏中的10位英雄展开的。不同的英雄有不同的定位:有些是AP英雄、有些是AD英雄;有些擅长输出,有些擅长辅助。
在这里插入图片描述

同样,对于K8s来说,一套K8s集群都是围绕着集群中的容器在运转,就像k8s官方描述的那样,它是一个容器编排平台。搭载不同业务的容器有不同的编排方式:有些需要持久化数据,有些只用处理一些无状态的请求;有些需要对外暴露端口,有些则在容器内自己玩就行。

LOL的英雄定位 - K8s的工作负载资源

在LOL中,有了英雄,我们要给它分配不同的定位:上路、中路、下路、打野、辅助,不同场景需要不同定位的英雄,比如作为辅助的风女就是没办法替代盲僧取野区刷野,作为战士的盖伦也没法替代女枪在后期作为射手提供输出。
在这里插入图片描述

K8s也是一样,有了镜像或者说应用,我们要给它配置不同的工作负载资源Workload Resources。K8s中的工作负载资源(Workload Resources)是用于管理应用的部署、扩展和操作的核心概念。这些资源帮助用户定义应用程序的期望状态,并自动处理实际状态与期望状态之间的差异。以下是几种主要的工作负载资源及其适用场景:

🌀 ​​Deployment​

​功能​​:管理无状态应用的 Pod 副本集,支持声明式更新、滚动升级和回滚。
​核心特性​​:

  • ​滚动更新​​:通过 maxUnavailable(最大不可用 Pod 数)和 maxSurge(最大额外 Pod 数)控制更新节奏。
  • ​自动恢复​​:Pod 故障时自动替换,确保副本数符合预期。
  • ​版本控制​​:保留历史版本(默认 10 个),支持一键回滚。
    ​适用场景​​:
  • Web 服务、API 网关等无需持久化状态的应用。
  • 需频繁更新或动态扩缩容的服务(如微服务后端)。

🧩 ​​StatefulSet​

​功能​​:专为有状态应用设计,提供稳定网络标识、持久化存储和有序操作。
​核心特性​​:

  • ​稳定标识​​:Pod 名称固定(如 web-0web-1),DNS 记录持久化(<pod-name>.<service-name>.svc)。
  • ​持久化存储​​:通过 volumeClaimTemplates 为每个 Pod 动态创建独立 PV,数据与 Pod 生命周期解耦。
  • ​有序操作​​:顺序创建(0→1→2)、逆序删除(2→1→0),滚动更新时按索引反向替换。
    ​适用场景​​:
  • 数据库集群(MySQL、PostgreSQL)、消息队列(Kafka、RabbitMQ)。
  • 分布式存储系统(Elasticsearch、Cassandra)。
    ​注意事项​​:
  • 需搭配 ​​Headless Service​​(ClusterIP: None)实现 DNS 解析。
  • PV 回收策略建议设为 Retain 防止误删数据。

📡 ​​DaemonSet​

​功能​​:确保每个节点(或指定节点)运行一个 Pod 副本,用于节点级守护进程。
​核心特性​​:

  • ​节点全覆盖​​:新节点加入时自动创建 Pod,节点移除时自动删除。
  • ​灵活调度​​:通过 nodeSelector 或污点容忍(Tolerations)控制部署范围。
  • ​资源优化​​:支持资源请求/限制配置,避免占用过多节点资源。
    ​适用场景​​:
  • 日志收集(Fluentd、Logstash)、监控代理(Prometheus Node Exporter)。
  • 网络插件(Calico、Flannel)、安全扫描工具(Clair)。

⚡ ​​Job​

​功能​​:管理一次性任务,确保指定数量的 Pod 成功运行后终止。
​核心特性​​:

  • ​任务容错​​:支持失败重试(backoffLimit 控制重试次数)。
  • ​并行控制​​:通过 parallelism 设置并发 Pod 数。
    ​适用场景​​:
  • 批处理作业(如数据迁移)、AI 训练任务。

⏱️ ​​CronJob​

​功能​​:基于时间调度的 Job 控制器,执行周期性任务。
​核心特性​​:

  • ​Cron 表达式​​:灵活定义任务执行时间(如 0 * * * * 每小时)。
  • ​任务继承​​:继承 Job 的所有特性(如重试、并行控制)。
    ​适用场景​​:
  • 定时备份、周期报表生成、资源清理任务。

💎 ​​工作负载资源对比表​

​资源类型​​核心作用​​关键特性​​典型场景​
​Deployment​无状态应用管理滚动更新、自动扩缩容、版本回滚Web 服务、API 网关
​StatefulSet​有状态应用管理稳定网络标识、持久化存储、有序操作数据库集群、消息队列
​DaemonSet​节点级守护进程全覆盖节点、污点容忍、自动扩缩日志收集、网络插件
​Job​一次性任务失败重试、并行控制批处理计算、数据迁移
​CronJob​周期性任务时间调度、继承 Job 特性定时备份、资源清理

✅ ​​总结​​:

  • ​无状态服务​​首选 Deployment,​​有状态服务​​必用 StatefulSet + PVC
  • ​节点级任务​​(如监控)用 DaemonSet,​​批处理/定时任务​​用 Job/CronJob
  • 生产环境需结合资源请求/限制(resources.requests/limits)避免资源争抢。

LOL的装备 - K8s的资源配置

在LOL中,选好了英雄,确定好了定位,还需要在实际应用中出不同的装备才能发挥这个英雄在这个定位中的最大威力。例如射手需要“最后的轻语”来实现处理前排的能力,坦克需要兰顿之兆来实现抵抗暴击的能力。
在这里插入图片描述

在K8s中也是一样,我们有了应用,也配置了工作负载,还需要其它的一些资源配置来发挥应用真正的实力。例如我们有个在线笔记的应用,我们给他配置好了StatefulSet后,还需要进一步给它配置pvc让它实现持久化笔记的能力;还需要进一步给它配置service来实现对集群外暴露接口的能力。那么常见的配置有哪些呢?

🔹 ​​Service​

​功能​​:为Pod提供​​稳定访问入口​​,实现服务发现与负载均衡。
​类型与场景​​:

  • ​ClusterIP​​:集群内部服务通信(默认)。
  • ​NodePort​​:通过节点IP+端口暴露服务(临时测试)。
  • ​LoadBalancer​​:云环境生产级外部访问(自动创建云LB)。

🔹 ​​ConfigMap​

​功能​​:存储​​非敏感配置​​(环境变量、配置文件),解耦应用与配置。
​场景​​:

  • 注入环境变量(如调试开关)。
  • 挂载配置文件(如Nginx配置)。
  • 支持热更新(Volume挂载时自动同步)。

🔹 ​​Secret​

​功能​​:管理​​敏感数据​​(密码、TLS证书),Base64编码存储。
​类型与场景​​:

  • ​Opaque​​:自定义敏感数据(如数据库密码)。
  • ​kubernetes.io/tls​​:HTTPS证书(用于Ingress)。
  • ​dockerconfigjson​​:私有镜像仓库认证。

🔹 ​​Ingress​

​功能​​:管理​​外部HTTP/S流量路由​​,支持域名/路径规则与SSL终止。
​核心组件​​:

  • ​Ingress控制器​​(如Nginx、Traefik)处理流量。
  • ​规则​​:按域名/路径转发到不同Service(如/api→后端服务)。

🔹 ​​PVC (PersistentVolumeClaim)​

​功能​​:声明​​持久化存储需求​​,抽象底层存储细节。
​场景​​:

  • 数据库持久化(如MySQL数据卷)。
  • 共享存储(NFS多Pod读写)。
  • 动态供给:通过StorageClass自动创建PV。

💎 ​​核心对比​

配置对象核心作用典型场景
Service服务发现+负载均衡微服务通信、外部流量接入
ConfigMap非敏感配置管理应用参数、环境变量注入
Secret敏感数据存储密码、TLS证书、API密钥
IngressHTTP/S流量路由多域名管理、HTTPS卸载
PVC持久化存储声明数据库存储、日志持久化

✅ ​​一句话总结​​:

  • 网络访问用 ​​Service/Ingress​​,配置分离用 ​​ConfigMap/Secret​​,数据持久用 ​​PVC​​。
  • 生产环境优先组合:LoadBalancer + Ingress + TLS Secret + PVC

结语

LOL和K8s都上手之后,其实我觉得相比较起来,LOL的上手难度要高多了,这么多个英雄,每个英雄有不同的机制和技能,这些可比K8s的内容多多了,所以如果大家LOL都能上手的话,上手K8s肯定不会是问题的!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85751.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5 游戏模板 —— FirstShootGame

UE5 游戏模板 —— FirstShootGame 前言一、GameMode二、组件1.ShooterPickUpComponent单播多播 2.ShooterWeaponComponent附着武器开火 3.小结4.ShooterProjectile初始化碰撞受击检测 三、Character初始化输入移动 总结 前言 有了前两个俯视角游戏的基础让我们来看看相对复杂…

国家级与省级(不含港澳台)标准地图服务网站汇总

在先前的文章中&#xff0c;介绍了部分省级的标准地图服务网站可以下载各个区县近几年、不同要素的标准地图&#xff08;链接&#xff1a;国家与省市县 标准地图服务网站 审图号地图下载&#xff09;&#xff0c;但是当时只汇总了部分省级的标准地图服务网站。 这两天看到了一个…

前端开发面试题总结-vue3框架篇(一)

文章目录 Vue3高频问答一、vue2/vue3中常用的构建工具和脚手架分别是什么? 有什么区别?二、请说一说vue2和vue3的区别&#xff1f;三、请说一说vue2和vue3响应式原理的区别&#xff1f;四、vue3 如何定义响应式数据?五、说一说你对vue3中的setup函数?六、说一说vue3中的路由…

【LLM06---相对位置编码】

文章目录 相对位置编码经典式XLNET式T5式DeBERTa式 相对位置编码 上一节我们介绍了绝对位置编码&#xff0c;这一节我们来看相对位置编码&#xff0c;也就是用相对位置信息来表示&#xff0c;之前每一个token的位置式通过一个绝对的位置向量来表示的&#xff0c;现在我们在计算…

纯跟踪算法本质解密:航向角偏差=预瞄角?数学证明与工程实践

定义关键问题 在深入纯跟踪算法核心前&#xff0c;必须澄清一对容易被混淆但至关重要的概念&#xff1a; 概念坐标系物理意义计算方式航向角偏差(α_global)全局坐标系车辆航向与预瞄点方向的夹角预瞄点方位角 - 车辆航向角预瞄角(α_body)车身坐标系预瞄点相对于车辆纵轴的夹…

自动驾驶叉车在仓库环境中是否安全?

随着自动驾驶叉车的兴起&#xff0c;仓库运营持续演进。叉车自动化技术的引入使仓库设施变得更快、更安全且更具成本效益。然而一个关键问题依然存在&#xff1a;它们在繁忙的仓库环境中是否安全&#xff1f; 一 、什么是自动驾驶叉车&#xff1f; 自动驾驶叉车&#xff0c;也…

Neo4j操作指南:修改节点数据与新增节点属性

Neo4j操作指南&#xff1a;修改节点数据与新增节点属性 引言 Neo4j作为领先的图数据库&#xff0c;提供了灵活的数据操作方式。在实际应用中&#xff0c;我们经常需要修改已有节点的数据或为节点添加新属性。本文将详细介绍如何使用Cypher查询语言在Neo4j中完成这些操作&…

AI大模型学习之基础数学:微积分在AI大模型中的核心-梯度与优化(梯度下降)详解

微积分在AI大模型中的核心:梯度与优化(梯度下降) 人工智能(AI)大模型的训练和优化依赖于数学基础,其中微积分、线性代数和概率统计构成了其理论核心。微积分在AI中的核心作用在于提供优化工具,尤其是通过梯度和梯度下降方法,帮助模型在高维参数空间中找到损失函数的最…

记录tweenjs踩坑

初次上手tweenjs&#xff0c;试了很多示例代码都不生效&#xff0c;结果在html中生效&#xff0c;在vue3的项目中怎么都不生效 <!DOCTYPE html> <html lang"en"><head><title>Tween.js / simplest possible example!</title><meta…

PINA开源程序用于高级建模的 Physics-Informed 神经网络

​一、软件介绍 文末提供程序和源码下载 PINA 是一个开源 Python 库&#xff0c;旨在简化和加速科学机器学习 &#xff08;SciML&#xff09; 解决方案的开发。PINA 基于 PyTorch、PyTorch Lightning 和 PyTorch Geometry 构建&#xff0c;提供了一个直观的框架&#xff0c;用…

一种对外IP/MAC地址收敛的软硬件系统

----------原创不易&#xff0c;欢迎点赞收藏。广交嵌入式开发的朋友&#xff0c;讨论技术和产品------------- 今天发一篇五年前的文章&#xff0c;不调单板。对以太网和交换片的较多理解&#xff0c;对系统级的优化。 大部分的网络设备&#xff0c;都由多种单板组成&#x…

【flink】 flink 读取debezium-json数据获取数据操作类型op/rowkind方法

flink 读取debezium-json数据获取数据操作类型op/rowkind方法。 op类型有c&#xff08;create&#xff09;,u&#xff08;update&#xff09;,d&#xff08;delete&#xff09; 参考官网案例&#xff1a;此处的"op": "u",就是操作类型。 {"before&qu…

某手游cocos2dlua反编译

一、获取加载的luac文件 通过frida hook libccos2dlua.so 的luaL_loadbuffer函数对luac进行dump js代码如下&#xff0c;得到dump后的lua文件 // 要加载的目标库名 var targetLibrary "libcocos2dlua.so"; var dlopen Module.findExportByName(null, "dlope…

`toRaw` 与 `markRaw`:Vue3 响应式系统的细粒度控制

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

Python文件迁移之Shutil库详解

Shutil是一个Python内置的用来高效处理文件和目录迁移任务的库。Shutil不仅支持基本的文件复制、移动和删除操作&#xff0c;还具备处理大文件、批量迁移目录、以及跨平台兼容性等特性。通过使用Shutil&#xff0c;我们可以更加轻松地实现文件系统的管理和维护&#xff0c;本文…

【服务器R环境架构】基于 micromamba下载 R 库包

目录 准备工作&#xff1a;下载并安装R环境下载并安装R环境方式1&#xff1a;下载 .tar.bz2 压缩包进行解压执行&#xff08;官方推荐&#xff09;方式2&#xff1a; 创建并激活R环境 下载R库包安装CRAN包在 micromamba 中安装 GitHub 包&#xff08;如 BPST&#xff09; 参考 …

基于 Apache POI 实现的 Word 操作工具类

基于 Apache POI 实现的 Word 操作工具类 这个工具类是让 AI 写的&#xff0c;已覆盖常用功能。 如不满足场景的可以让 AI 继续加功能。 已包含的功能&#xff1a; 文本相关&#xff1a; 添加文本、 设置字体颜色、 设置字体大小、 设置对齐方式、 设置字符间距、 设置字体加粗…

时间序列预测、分类 | 图神经网络开源代码分享(上)

本期结合《时间序列图神经网络(GNN4TS)综述》&#xff0c;整理了关于图神经网络在时间序列预测、分类等任务上的开源代码和学习资料以供大家学习、研究。 参考论文&#xff1a;《A Survey on Graph Neural Networks for Time Series: Forecasting, Classification, Imputation,…

Vue 添加水印(防篡改: 删除水印元素节点、修改水印元素的样式)

MutationObserver_API: 观察某一个元素的变化// index.vue<template><div class="container"><Watermark text="版权所有" style="background: #28c848"><!-- 可给图片、视频、div...添加水印 --><div class=&quo…

如何处理开发不认可测试发现的问题

解决方案 第一步&#xff1a;收集确凿证据 确保有完整的复现结果准备详细的记录材料&#xff1a; 截屏录屏操作步骤记录 带着这些证据与开发人员进行沟通 第二步&#xff1a;多角度验证 如果与开发人员沟通无果&#xff1a; 竞品分析&#xff1a;查看市场上同类产品如何…