K8S pod无损上下线

在最近的K8s服务上线过程中,我发现了一些问题,更具体的说,我在使用阿里云k8s的过程中注意到:会出现slb短时RT增加,Pod部署初期就达到了扩容上限,并且开始大量的扩容,这无疑占用了大量的k8s资源。实际上,大部分情况下,pod只需要2个,但结果却扩容到了几十个,这是一个问题。

为了解决这问题,我查阅了一些相关文档并整理出了一些解决方法。其中,更新应用时,如何实现 K8s 零中断滚动更新?一文详析在 K8s 中更新应用时为何会发生服务中断以及如何避免?icon-default.png?t=N7T8https://mp.weixin.qq.com/s/ceqNDxOs-m-iXj980kNQXw这篇文档给了我许多启发。

首先,对于pod来说,新建和删除是自然的,新建pod的时候需要保证服务能够完全启动并可以正常响应请求,然后就可以将pod所在的node挂到service上了。这里,我们只需要配置了就绪检查就能保证pod的可用。

然后就是删除pod的操作,这里面可能会出现pod收到SIGTERM信号停止工作后,没能从EndPoints中移除。这就会导致service把正常的请求跳转到已经停止工作的pod上。对于这种情况,我建议我们可以为pod设置一个preStop Hook,让 Pod 在收到 SIGTERM 时,先sleep一段时间,而不是立刻停止工作。这样就能保证从SLB转发过来的流量还可以继续被pod处理。

 当然还有一种时就是pod已经是termintaing状态,但是 iptables/ipvs条目清理和service移除后端node这两个操作之间存在时间差,虽然他们是同时进行的,但是对于大量请求,总会有部分请求在这细小的时间差之间成为漏网之鱼。对于这种情况,咱们可以分开说,首先是Cluster 模式下 kube-proxy会将所有业务 Pod 写入 Node 的 iptables/ipvs 中,如果当前 Node 没有业务 pod,则该请求会被转发给其他 Node,因此不会存在服务中断(总之目前来看使用cluster模式可以忽略这种中断可能性),还有一种就是Local 模式下的kube-proxy,这种模式会导致请求中断,中断原因主要与cluster和local这两种外部流量策略有关,详细的可以参考阿里的这个文档:

使用Service对外暴露应用_容器服务 Kubernetes 版 ACK-阿里云帮助中心 (aliyun.com)

最后,我们还遇到了在上线的时候,服务启动一开始,发现pod所使用的资源很高。这就导致了pod数量的扩容,对于这类问题,我们其实也可以解决。主要的方法就是在服务上线的时候,设置监控不去读取新启动的pod的资源使用情况。   我从两个维度进行了尝试,包括集群维度和工作负载维度。

集群维度

在集群维度,我们可以通过升级ACK提供的最新版metrics-server,并在其启动参数上开启开关防止多弹,这是全局开关,设置后对集群内所有相关负载生效。

这是全局开关,设置后对集群内所有相关负载生效。

##在metrics-server的启动参数中加入以下选项。
--enable-hpa-rolling-update-skipped=true  

工作负载维度:

而在工作负载维度上,我们有两种方法:

方法一:通过在指定工作负载的模板中添加以下Annotation,可以在滚动发布时临时暂停HPA的判断生效。

##工作负载的spec.template.metadata.annotations加入Annotation,滚动发布时临时暂停HPA的判断生效。
HPARollingUpdateSkipped: "true"

方法二:通过在指定工作负载的模板中添加以下Annotation,可以在应用发布开始阶段跳过设定的预热时间段。

##工作负载的spec.template.metadata.annotations加入Annotation,在应用发布开始阶段跳过设定的预热的时间段。
HPAScaleUpDelay: 3m # 3m仅为示例,具体时间段请按需设置

 详细的可以参考阿里云的文档:容器服务ACK弹性伸缩的常见问题及解决办法_容器服务 Kubernetes 版 ACK-阿里云帮助中心

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

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

相关文章

接口自动化测试之Yaml数据驱动封装!

一、数据驱动:pytest.mark.parametrize() 首先看个样本: import pytestclass TestData:# parametrize有两个值,一个是args_name:参数名,一个是args_value:参数值,可以有多个,进行数据解包# args_value可以…

【广州华锐互动VRAR】VR戒毒科普宣传系统有效提高戒毒成功率

随着科技的不断发展,虚拟现实(VR)技术已经逐渐渗透到各个领域,为人们的生活带来了前所未有的便利。在教育科普领域,VR技术的应用也日益广泛,本文将详细介绍广州华锐互动开发的VR戒毒科普宣传系统&#xff0…

serialVersionUID确保序列化版本

实现Serializable接口的目的是为类可持久化,比如在网络传输或本地存储,为系统的分布和异构部署提供先决条件。若没有序列化,现在我们所熟悉的远程调用,对象数据库都不可能存在, serialVersionUID适用于java序列化机制。…

万户协同办公平台ezoffice wpsservlet接口任意文件上传漏洞

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一、漏洞描述 万户ezOFFICE协同管理平台是一个综合信息基础应用平台&am…

生成模型之Flow-Based model

Flow-Based Model 文章目录 Flow-Based Model简介总览数学基础jacobian matrixdeterminant行列式Change of variable theorem 架构常见几种方法coupling layer采用1*1卷积进行channel shuffle 简介 ​ Flow-Based对概率密度函数的直接建模,这使得它们在数据生成和推…

Ubuntu22.04 使用Docker部署Neo4j出错 Exited(70)

项目场景: 最近需要使用Neo4j图数据库,因此打算使用docker部署 环境使用WSL Ubuntu22.04 问题描述 拉下最新Neo4j镜像,执行命令部署 启动容器脚本 docker run -d -p 7474:7474 -p 7687:7687 \ --name neo4j \ --env "NEO4J_AUTHneo…

封装了一个顺滑嵌套滚动的框架

首先查看效果图 就是开始滚动的时候,上面的头部和下面的内容是 一起滚动的,但是当滚动到segment 的时候,segment 是悬停 的,下面的tableView是分区的 架构设计 我们设计一个架构,以下面的tablView为主体&#xff0…

SiC MOSFET体二极管双极性退化及电流密度影响的研究

标题:Investigation of the bipolar degradation of SiC MOSFET body diodes and the influence of current density (IEEE International Reliability Physics Symposium (IRPS)) 摘要 摘要-双极退化在使用双极操作模式的4H-SiC器件中仍然是一个需要考虑的关键问题…

Excel 表列序号

题目链接 Excel 表列序号 题目描述 注意点 columnTitle 仅由大写英文组成1 < columnTitle.length < 7 解答思路 对于"CAB"&#xff0c;计算其序列号的思路&#xff1a;字母B的贡献值为2&#xff0c;字母A的贡献值为1 * 26&#xff0c;字母C的贡献值为3 * …

排查200M宽带下行速度低于100M问题(七十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

流量分析1--菜刀666

1&#xff1a;菜刀666&#xff1a; 题目描述 分析流量包&#xff0c;过滤http数据流 追踪TCP数据流 对比第5个流和第7个流发现&#xff0c;同样的目录下 多出了6666.jpg。猜测是由攻击者上传&#xff0c;直接在请求包里搜索FFD8--FFD9 保存为1.jpg 利用foremost工具对1.jpg进…

“无忧文件安全!上海迅软DSE文件加密软件助您轻松管控分公司数据!

许多大型企业集团由于旗下有着分布在不同城市的分支机构&#xff0c;因此在规划数据安全解决方案时&#xff0c;不适合采用市面上常见的集中式部署方式来管控各分部服务器&#xff0c;而迅软DSE文件加密软件支持采用分布式部署的方式来解决这一问题。 企业用户只需在总部内部署…

【移动端vant 地址选择滑动不了】

分析&#xff1a; H5页面直接在浏览器打开是没有任何问题的&#xff0c;但是内嵌到小程序中就会出现&#xff0c;目前已出现在抖音&#xff0c;快手&#xff0c;小程序中&#xff0c;其他的没有试 大致看了一下&#xff0c;滑动不了的原因&#xff0c;可能是页面禁止滑动或滚动…

《使用ThinkPHP6开发项目》 - 设置项目环境变量

《使用ThinkPHP6开发项目》 - 安装ThinkPHP框架-CSDN博客 在上一编我们讲了ThinkPHP6框架的创建&#xff0c;创建完成ThinkPHP6框架后&#xff0c;我们这里就可以开始设置我们的环境变量了。 安装完成ThinkPHP6框架生成的项目文件 修改项目配置我们修改项目config文件夹里的对…

MySQL 数据库如何实现 XA 规范?

本文我们来讨论 MySQL 的 XA 规范有哪些应用相关的内容。 MySQL 为我们提供了分布式事务解决方案&#xff0c;在前面的内容中提到过 binlog 的同步&#xff0c;其实是 MySQL XA 规范的一个应用&#xff0c;那么 XA 规范是如何定义的&#xff0c;具体又是如何应用的呢&#xff…

vscode如何为python设置静态类型检测工具:mypy

设置好之后的效果如下图所示&#xff0c;你可以在下方problems一栏看到工作区所有文件存在的问题 安装mypy就像其他插件一样&#xff0c;在extensions中搜索mypy&#xff0c;再install即可。 但是安装以后&#xff0c;我的vscode弹出了以下通知&#xff1a; The mypy daemon e…

使用DockerUI结合内网穿透工具轻松实现公网访问和管理docker容器

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

【智能家居】六、摄像头安装实现监控功能点、人脸识别(face_recognition的使用)

一、定义及第三方库的说明 OCR &#xff08;光学字符识别&#xff09;文字识别、图像识别mjpg-streamer实时流式传输视频工具树莓派mjpg-streamer Face Recognition人脸识别 Dlib 计算机视觉问题的工具和算法face_recognition库OpenCV 计算机视觉和机器学习的开源库 三、香…

万界星空科技MES---制造企业的加工生产模式

在现代制造业中&#xff0c;加工生产模式是制造企业组织和管理生产过程的重要方面。不同的加工模式适用于不同的生产需求和产品类型。其中流水型、离散型和混合型是三种常见的加工生产模式。1. 流水型加工模式 流水型加工模式是一种高度自动化的生产方式&#xff0c;适用于…

Docker部署开源分布式任务调度系统DolphinScheduler与远程访问办公

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…