应用优雅上下线

1. 概述

kubernetes滚动升级的过程:

  1.  集群Deployment 或者 Statefulset 发生变化,触发部署滚动升级;
  2.  根据 Deolyement 等配置,K8S集群首先启动新的POD来替代老 POD;
  3.  Deployemnt 根据配置调度 POD,拉取镜像,此时 POD 进入 Pending 状态;
  4.  POD 绑定到Node上,启动容器,在就绪检查readinessProbe 探针通过后,新的POD进入Ready状态;
  5.  K8S集群创建Endpoint,将新的POD纳入Service 的负载均衡;
  6.  K8S集群移除与老POD相关的Endpoint,并且将老POD状态设置为Terminating,此时将不会有新的请求到达老POD,同时调用PreStop Hook执行配置的脚本;
  7.  K8S集群会给老POD发送SIGTERM信号,并且等待 terminationGracePeriodSeconds 这么长的时间。(默认为30秒,可以根据优雅下线服务需要消耗时间调整)
  8.  超过terminationGracePeriodSeconds等待时间后, K8S集群会强制结束老POD,在这个时间段内要将老 POD 资源释放掉,否则可能残留无用资源被占用。

从以上过程可以看到,如果在terminationGracePeriodSeconds 没有及时释放服务注册等资源信息,Service 负载均衡的健康检查又没有检查到老 POD服务已经挂掉,导致请求分发到这些 POD 上,从而触发一系列的请求错误,因而需要配置优雅下线脚本,在terminationGracePeriodSeconds 时间段内执行完毕。

 

2.优雅启动

kubernetes 集群提供了探针,类似健康检查,只有该请求通过,新的 POD 才能进入 Ready 状态,kubernetes集群才会将新的 POD 纳入 Service 的负载均衡。

因而如果该应用(POD)仅仅提供 service 配置的服务,不需要配置探针,就可以优雅启动,但是实际 POD 往往还有 HSF,LWP,Dubbo等注册于配置服务其实现负载均衡的服务,所以需要确保这些服务都已经启动,所以需要配置相应的探针。

同时,任何一个服务可能在运行中因为某种原因不稳定,导致服务中断,这个时候还需要配置livenessProbe探针,确保服务出故障时及时止损。

我们的应用主要有HSF,LWP 和 Https 服务,对于三种服务都有的应用,要求应用提供健康检查的接口,能即时检查三种服务都正常与否,然后做以下配置:

livenessProbe:failureThreshold: 3initialDelaySeconds: 30periodSeconds: 30successThreshold: 1tcpSocket:port: 5084timeoutSeconds: 1
readinessProbe:failureThreshold: 3initialDelaySeconds: 30periodSeconds: 30successThreshold: 1tcpSocket:port: 5084timeoutSeconds: 1
restartPolicy: Always

readinessProbe配置表示只有5804端口请求正常返回,pod 才会进入 ready 状态,确保各种服务 ok 。

livenessProbe 表示每10s 探一下5804端口,如果返回失败,达到阈值后,pod 会重启,对于服务出问题的 POD 及时止损。

注意:readinessProbe探针的 探测频率和延时时间,不健康阈值等数据要合理,部分应用启动时间本身较长,如果设置的时间过短,会导致 POD 反复无效重启。

3. 优雅下线:

我们的应用云上主要有 HSF,LWP 和 Https 服务,在 pod prestop里设置执行摘除服务注册信息脚本,来完成优雅下线。

https 服务基于 kubernetes 服务 Service 来实现服务暴露,在老 POD 状态设置为Terminating后,就不会有请求达到,因而已经优雅下线;

lwp 服务,通过注册 vipserver 来提供负载均衡,需要在下线前先摘除该服务注册,防止 老POD 下线后还有请求达到老 POD;

HSF 服务通过注册 configserver 来提供负载均衡,需要在下线前先摘除该服务注册,防止 老POD 下线后还有请求达到老 POD。

yaml:

lifecycle:preStop:exec:command:- sudo- '-u'- admin- /home/admin/shutdown.sh- {app_name}

preStop在 pod 终止之前,执行脚本 appctl.sh {app_name} stop。

终止 HSF 与 LWP 脚本:

#!/bin/bashAPP_NAME=$1## HEALTH_URL="http://localhost:7002/health"offline() {echo "INFO: ${APP_NAME} try to offline..."offline_lwpoffline_hsfecho "INFO: ${APP_NAME} offline success"return $?
}offline_lwp() {echo "offline lwp"times=3for e in $(seq 3); docurl -s --connect-timeout 3 --max-time 5 ${offline_lwp_url}${APP_NAME} -o /dev/nullsleep 1done
}offline_hsf() {check_hsf=`(/usr/sbin/ss -ln4 sport = :12200; /usr/sbin/ss -ln6 sport = :12200) | grep -c ":12200"`check_pandora=`(/usr/sbin/ss -ln4 sport = :12201; /usr/sbin/ss -ln6 sport = :12201) | grep -c ":12201"`echo "try to offline hsf..."if [ $check_hsf -ne 0 -a $check_pandora -ne 0 ]; thenecho "start to offline hsf...."ret_str=`curl --max-time ${HSF_ONLINE_TIMEOUT} -s "http://localhost:12201/hsf/offline?k=hsf" 2>&1`if echo "$ret_str" | grep "server is unregistered on cs(dr)" &>/dev/null; thenecho "hsf offline success."return 0elseecho "hsf offline failed."exit 9 # hsf offline failedfielseif [ $check_hsf -eq 0 ]; thenecho "WARN: port 12200 cannot be detected."fiif [ $check_pandora -eq 0 ]; thenecho "WARN: port 12201 cannot be detected."fiecho "WARN: hsf offline failed."# DO NOT exit herefi
}echo "[stop 1] before call offline hsf,lwp ..."


原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

算术运算符

运算符 算术运算符&#xff1a;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%&#xff0c;&#xff0c;–赋值运算符&#xff1a;关系运算符&#xff1a;>,<,>,<,,!,instanceof逻辑运算符&#xff1a;&&,||,!位运算符&#xff1a;&&#xff…

搜索场景下的智能推荐演变之路

摘要&#xff1a;传统的推荐手段主要还是深度挖掘用户行为和内容本身相似性的价值&#xff0c;包括但不限于协同过滤&#xff0c;内容表征向量召回&#xff0c;以及各式各样的点击率预估模型&#xff0c;然后这样的推荐行为缺乏内在的逻辑性和可解释性&#xff0c;有一种知其然…

调查了 17,000 多位程序员,当前的云原生开发现状究竟如何?

整理 | 弯月&#xff0c;责编 | 郭芮头图 | CSDN 下载自东方IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;容器的标准化使用改变了软件的开发方式&#xff0c;我们迎来了开发运维的时代&#xff0c;基于云原生的开发能够帮助我们构建更灵活、更强大的应用程序。…

阿里研究员:测试稳定性三板斧,我怎么用?

阿里妹导读&#xff1a;如何治理测试稳定性问题&#xff1f;很多人会说&#xff1a;环境、流程管控、监控、工具化、加机器、专人负责、等等。这些都是对的。不过这些都是解决方案层面的&#xff0c;而不是方法论和理论体系层面的。今天&#xff0c;阿里研究员郑子颖来说说测试…

阿里架构总监一次讲透中台架构,13页PPT精华详解,建议收藏!

本文整理了阿里几位技术专家&#xff0c;如架构总监 谢纯良&#xff0c;中间件技术专家 玄难等几位大牛&#xff0c;关于中台架构的几次分享内容&#xff0c;将业务中台形态、中台全局架构、业务中台化、中台架构图、中台建设方法论、中台组织架构、企业中台建设实施步骤等总共…

逻辑运算符,位运算符

逻辑运算符&#xff0c;位运算符 逻辑运算符 package operator;//逻辑运算符 public class Demo05 {public static void main(String[] args) {//与 或 非boolean atrue;boolean bfalse;System.out.println("a&&b:"(a&&b));//逻辑与&#xff0c;…

Redis 6.0 的客户端缓存是怎么肥事?一文带你了解!

来源 | 程序员历小冰责编 | Carol封图 | CSDN 付费下载于视觉中国近日 Redis 6.0.0 GA 版本发布&#xff0c;这是 Redis 历史上最大的一次版本更新&#xff0c;包括了客户端缓存 (Client side caching)、ACL、Threaded I/O 和 Redis Cluster Proxy 等诸多更新。我们今天就依次聊…

AI时代,你的职业会是?99%的人都无法直面!

在我10岁的时候&#xff0c;算命先生曾对说我30岁时我会每天与八阿哥玩在一起。 当时懵懂的我一脸茫然&#xff0c;想着谁是我的八阿哥&#xff0c;却在30岁的这一年意识到自己确实日以继夜的与八阿哥在一起。 曾经&#xff0c;我们也担心自己未来的工作岗位是否会被人工智能给…

三元运算符和总结

三元运算符和总结 运算符的优先级 () 条件运算符 package operator;public class Demo07 {public static void main(String[] args) {int a10;int b20;ab;//aaba-b;//aa-bSystem.out.println(a);//字符串连接符 &#xff0c;StringSystem.out.println(""ab);//10,…

Java 12 新特性概述

Java 12 已如期于 3 月 19 日正式发布&#xff0c;此次更新是 Java 11 这一长期支持版本发布之后的一次常规更新&#xff0c;截至目前&#xff0c;Java 半年为发布周期&#xff0c;并且不会跳票承诺的发布模式&#xff0c;已经成功运行一年多了。通过这样的方式&#xff0c;Jav…

5G +边缘计算,优酷如何做云渲染?

作者| 阿里文娱高级技术专家 伊耆责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;当5G来了&#xff0c;视频还是平面的影像吗&#xff0c;只能静静观看吗&#xff1f;一定不是&#xff01;现在&#xff0c;你可以像玩游戏一样…

不做会死!互联网时代的企业必定都要实现中台

AI 前线导读&#xff1a; 自 2018 年底以来&#xff0c;伴随着阿里、腾讯、百度、京东等一众互联网巨头的大规模组织架构调整&#xff0c;“中台”的热度陡然攀升。一时间&#xff0c;各大互联网公司纷纷开始跟随建设中台。中台的概念是被阿里带火的&#xff0c;2015 年&#x…

包机制。。

包机制 为了更好的组织类&#xff0c;java提供了包机制&#xff0c;用于区别类的命名空间//本质就是文件夹 包语法格式 package pkj[.pkg[.pkg3...]];一般利用公司域名倒置作为包名&#xff1a;com.boss.xxx 导入包语法 import package1[.package2...].(classname|*);尽量不要…

Fortofy扫描安全漏洞解决——Unreleased Resource: Streams未释放资源漏洞

问题描述&#xff1a; 大部分 Unreleased Resource 问题只会导致一般的软件可靠性问题&#xff0c;但如果攻击者能够故意触发资源泄漏&#xff0c;该攻击者就有可能通过耗尽资源池的方式发起 denial of service 攻击。 问题代码&#xff1a; FileInputStream inputStream new…

ETL异构数据源Datax_使用querySql_08

使用说明 当用户配置了这一项之后&#xff0c;DataX系统就会忽略table&#xff0c;column 这些配置型&#xff0c;直接使用这个配置项的内容对数据进行筛选&#xff0c;例 如需要进行多表join后同步数据&#xff0c;使用select a,b from table_a join table_b on table_a.id t…

我被“非结构化数据包围了”,请求支援!

阿里妹导读&#xff1a;非结构化数据的内容占据了当前数据海洋的80%。换句话来说&#xff0c;就是我们都被“非结构化数据”包围了。由于非结构化数据的信息量和信息的重要程度很难被界定&#xff0c;因此对非结构化数据的使用成为了难点。如果说结构化数据用详实的方式记录了企…

82年 AI程序员征婚启示火了!年薪百万,女生神回复

最近在某社区&#xff0c;一则程序员征婚启示火了&#xff01;很多女生在评论区表示“全中”&#xff0c;想交流看看。然后评论区就炸了&#xff0c;有人恶意说yp&#xff0c;有人说看中了楼主的钱。笔者一翻&#xff0c;发现楼主果然无意中透露了百万年薪收入&#xff0c;虽然…

ETL异构数据源Datax_datax-web简述_09

简介 地址:https://github.com/WeiYe-Jing/datax-web DataX Web是在DataX之上开发的分布式数据同步工具&#xff0c;提供简 单易用的 操作界面&#xff0c;降低用户使用DataX的学习成本&#xff0c;缩短任 务配置时间&#xff0c;避免配置过程中出错。用户可通过页面选择数据 源…

阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性

首先我们必须承认&#xff0c;Java 8 是一个里程碑式的版本&#xff0c;这个相信大多数Java程序员都认同&#xff0c;其中最知名的是 Streams & Lambda &#xff0c;这让 Functional Programming 成为可能&#xff0c;让 Java 换发新的活力。这也是即便 Oracle 不在支持 Ja…

AWS 专家教你使用 Spring Boot 和 DJL ,轻松搭建企业级机器学习微服务!

作者 | Qing Lan&#xff0c;Mikhail Shapirov责编 | Carol封图 | CSDN 下载自视觉中国出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;许多AWS云服务的用户&#xff0c;无论是初创企业还是大公司&#xff0c;都在逐步将机器学习 (ML) 和深度学习 (DL) 任务…