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.hqwc.cn/news/255478.html

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

相关文章

【LeetCode】2629. 复合函数

复合函数 题目题解 题目 请你编写一个函数,它接收一个函数数组 [f1, f2, f3,…, fn] ,并返回一个新的函数 fn ,它是函数数组的 复合函数 。 [f(x), g(x), h(x)] 的 复合函数 为 fn(x) f(g(h(x…

HTTP 缓存机制

一、强制缓存 只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存而无需再请求服务器。 强制缓存是利用下面这两个 HTTP 响应头部(Response Header)字段实现的,它们都用来表示资源在客户端缓存的有效期: Cache…

六个自媒体写作方法,提升自媒体创作收益

在自媒体时代,写作成为了一个不可或缺的技能。特别是对于新手来说,掌握一些有效的写作方法,可以事半功倍,更好地展现个人创意和观点。在这里,我将分享六个适合新手的自媒体写作方法,希望能够为你在写作之路…

肾虚的16个表现,你有吗?

现代研究发现:导致人体衰老的根本原因不是年龄,而是“肾虚”。此外,肾虚不是男人的专利,女人肾虚的危害更大。 一、肾虚的16个表现 1、总感觉口咸 我们的五味(酸苦甘辛咸)跟我们的脏腑是相对应的&#xf…

基于jsp+servlet的在线考试系统

基于jspservlet的在线考试系统, 演示地址:英语在线考试系统考生测试账号:用户名:stu,密码:stu,管理员测试账号用户名:admin,密码:admin (源码里包含数据库文件) 本系统分为两个角色,一个时考生,一个是管理员,考生可…

马来西亚虾皮选品工具:如何优化您的电商业务

随着电子商务的快速发展,越来越多的商家开始将目光投向在线市场。在马来西亚,虾皮(Shopee)平台成为了一个备受瞩目的电商平台,吸引了大量的商家和消费者。然而,要在这个竞争激烈的市场中脱颖而出并取得成功…

Java程序员,你掌握了多线程吗?【文末送书】

目录 摘要 01、多线程对于Java的意义 02、为什么Java工程师必须掌握多线程 03、Java多线程使用方式 04、如何学好Java多线程 参与方式🥇 推荐一个人工智能学习网站 https://www.captainbed.cn/bear 摘要 互联网的每一个角落,无论是大型电商平台的…

Image augmentation for classification¶

参考文章: We can divide the process of image augmentation into four steps: 1.导入albumentations和 a library库以从磁盘读取图像(例如,OpenCV)。 2.Define an augmentation pipeline 管道. 3.Read images from the disk…

EUREKA: HUMAN-LEVEL REWARD DESIGN VIACODING LARGE LANGUAGE MODELS

目录 一、论文速读 1.1 摘要 1.2 论文概要总结 相关工作 主要贡献 论文主要方法 实验数据 未来研究方向 二、论文精度 2.1 论文试图解决什么问题? 2.2 论文中提到的解决方案之关键是什么? 2.3 用于定量评估的数据集是什么?代码有…

各种滤波算法的比较(GF、KF、EKF、UKF、PF)

目录 一、前言 二、滤波算法介绍 1、GF(高斯滤波) 2、KF(卡尔曼滤波) 3、EKF(可扩展卡尔曼滤波) 4、UKF(无迹卡尔曼滤波) 5、PF(粒子滤波) 三、不同滤…

windows MYSQL下载和自定路径安装,以及解决中文乱码问题。

文章讲的很详细,请耐心往下看。 一、mysql下载 下载网址:https://www.mysql.com/downloads/ 表示不登录,直接下载。 以上就把安装包下载完了。下载是8.0.35版本。 二、接下来看怎么安装 1.双击安装包,进行安装。 注意&#x…

零容忍泄露:掌握上海迅软DLP企业加密系统的数据安全秘诀

由于企事业单位内部数据呈暴发式增长,且数据类型日益繁杂,企业对数据的安全管控难度也在不断增大。这其中包括研发的设计文档、代码、图纸,以及业务运营的详细收支情况、招商投标的详细信息等,这些涉及到企业核心数据资产的信息需…