当egg遇见K8s会发生什么?

简介: 公司有个项目用了研发人员用了egg,一个很小的细节问题给我们带来的小困扰,附上问题描述和解决方法。

Egg介绍:
Egg 奉行『约定优于配置』,按照一套统一的约定进行应用开发,团队内部采用这种方式可以减少开发人员的学习成本,开发人员不再是『钉子』,可以流动起来。没有约定的团队,沟通成本是非常高的,比如有人会按目录分栈而其他人按目录分功能,开发者认知不一致很容易犯错。但约定不等于扩展性差,相反 Egg 有很高的扩展性,可以按照团队的约定定制框架。使用 Loader可以让框架根据不同环境定义默认配置,还可以覆盖 Egg 的默认约定。

K8s介绍:
Kubernetes是Google开源的一个容器编排引擎,简称K8s,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在K8s中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

目前公司某项目使用了egg框架,运维团队部署该项目使用了k8s集群,今天出现了一个奇怪的问题,我们的打包后的docker 镜像,在单独的ECS上可以正常该服务,但是部署到k8s的时候,启动失败,

这个问题看似很诡异,一模一样的镜像,一模一样的网络权限,软件层面上完全一样的,为啥启动不成功。今天运维部门对k8s扩容过,添加过一个8核的work节点,难道是这个节点导致的,但是这个节点上也运行了很多容器,不单单只有该项目。

带着这个思考,和同事沟通后,结果确实是添加的新的node节点间接导致了这个问题,了解到他用egg的时候,没有去定义work进程的数量,egg就会自动去创建work进程,创建的进程数据是基于获取的物理系统的CPU线程数来决定的。

01.png

如上图所示,该项目所运行的容器的宿主机的CPU线程数是8,通过观察,发现该项目会自动启动8个进程,如果我们采用32线程的CPU,那它就会在容器中启动32个进程,但是容器的资源是做过限制的,虽然你看到这么多CPU线程,但不是给你一个容器用的,一下子请求这么多资源,肯定会启动失败的。而且容器的思想是一个容器运行一个进程,只干一件事,这在物理机上部署egg或许这个特性比较方法,但是容器上部署就会出现这种坑。

解决方法:

让egg和pm2启动进程的方式一样,固定运行的进程数,不要动态获取CPU信息,去一厢情愿的启动进程,和docker的资源隔离起冲突。

02.png

总结:
1.无论使用什么新框架新技术,使用前必须深入了解和研究;
2.启动服务的时候,都不能用默认配置,研发和运维沟通后做一个合适的参数,因为本地环境和生产环境还是会有资源容量上的差异,避免各做各的;

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
前端开发
Grafana 分享带可变参数的链接
Grafana 分享带可变参数的链接
1178 0
Grafana 分享带可变参数的链接
|
人工智能 数据安全/隐私保护 计算机视觉
GitHub爆款神器 | IOPaint:21.7k star 开源AI图像修复项目,竟能秒删水印、拓展画幅!
IOPaint 是一款由 Sanster 团队开发的开源图像处理工具,集成多种 SOTA AI 模型,支持图像擦除、对象替换、文本绘制和图像外扩等功能。它操作简便,一键安装,适用于 Windows、macOS、Linux 和 Apple Silicon 系统,适合摄影爱好者、电商从业者及内容创作者使用,大幅提升图像处理效率。
2547 0
|
文字识别 运维 监控
架构解密|一步步打造高可用的 JOCR OCR 识别服务
本文深入解析了JOCR OCR识别服务的高可用架构设计,涵盖从用户上传、智能调度、核心识别到容错监控的完整链路,助力打造高性能、低成本的工业级OCR服务。
478 0
架构解密|一步步打造高可用的 JOCR OCR 识别服务
|
JSON 供应链 API
商品条码查询 API 实战指南:掌握商品“唯一身份标识”
商品条码查询API简介:基于1974年诞生的条码技术,该API通过输入13/14位条码,快速获取商品基本信息(名称、品牌、规格等)和成分信息(营养成分、配料表等)。其核心功能包括商品条码查询接口与成分查询接口,广泛应用于零售、电商、物流及健康饮食等领域。支持HTTP POST请求,提供便捷的代码调用示例。作为数字化转型的重要工具,它不仅方便消费者查询商品详情,还助力商家优化库存管理与销售流程,提升运营效率。
3225 3
|
运维 Kubernetes Cloud Native
主流定时任务解决方案全横评
定时任务作为一种按照约定时间执行预期逻辑的通用模式,在企业级开发中承载着丰富的业务场景,诸如后台定时同步数据生成报表,定时清理磁盘日志文件,定时扫描超时订单进行补偿回调等。
主流定时任务解决方案全横评
|
JavaScript IDE 开发工具
你的第一个Vue项目HelloWorld看这一篇就够了
你的第一个Vue项目HelloWorld看这一篇就够了
848 0
|
机器学习/深度学习 编解码 算法
无感验证码的工作原理
无感验证码是一种隐形的身份验证机制,通过分析用户行为(如鼠标移动、点击)和设备信息来辨别真实用户,防止机器人攻击。工作流程包括页面加载验证脚本、收集行为和设备数据、传输数据至服务器端进行分析、返回验证结果。示例代码展示了如何收集鼠标事件和设备信息,并发送到服务器。实际应用中,需采用更复杂算法和安全措施以确保安全性。
|
自然语言处理 API 数据安全/隐私保护
通过阿里云Milvus和通义千问快速构建基于专属知识库的问答系统
本文展示了如何使用阿里云向量检索 Milvus 版和灵积(Dashscope)提供的通用千问大模型能力,快速构建一个基于专属知识库的问答系统。在示例中,我们通过接入灵积的通义千问 API 及文本嵌入(Embedding)API 来实现 LLM 大模型的相关功能。
通过阿里云Milvus和通义千问快速构建基于专属知识库的问答系统
|
消息中间件 存储 物联网
RocketMQ基础概念
RocketMQ基础概念
350 1

热门文章

最新文章