论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
容器及微服务
›
容器及微服务
›
Pod的优雅上下线
Pod的优雅上下线
罪恶克星
金牌会员
|
2025-1-10 18:46:13
|
显示全部楼层
|
阅读模式
楼主
主题
804
|
帖子
804
|
积分
2412
Pod的优雅上下线依靠k8s的监控检查机制,以及 Pod lifecycle Hooks,通过这些kubernetes的机制,配合服务发现的流量管理机制,实现业务的优雅上下线。
基础概念
Pod 健康检查
Pod的健康状态由两类探针来检查:LivenessProbe和ReadinessProbe。
livenessProbe(存活探针)
表明容器是否正在运行。
如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其 重启策略的影响。
如果容器不提供存活探针,则默认状态为 Success。
readinessProbe(就绪探针)
表明容器是否可以正常继承请求。
如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 所在。
初始延迟之前的就绪状态默认为 Failure。
如果容器不提供就绪探针,则默认状态为 Success。
StartupProbe(这个 1.16 版本增加的)
如果三个探针同时存在,先执行 StartupProbe 探针,其他两个探针将会被暂时禁用,直到 pod 满足 StartupProbe 探针配置的条件,其他 2 个探针启动,如果不满足按照规则重启容器。
两种探针的区别
总的来说 ReadinessProbe 和 LivenessProbe 是使用相同探测的方式,只是探测后对 Pod 的处置方式差别:
ReadinessProbe: 当检测失败后,将 Pod 的 IP
ort 从对应 Service 关联的 EndPoint 所在列表中删除。
LivenessProbe: 当检测失败后将杀死容器,并根据 Pod 的重启策略来决定作出对应的措施。
例子
livenessProbe:
failureThreshold: 3
initialDelaySeconds: 600
periodSeconds: 5
successThreshold: 1
tcpSocket:
port: 7800
timeoutSeconds: 1
readinessProbe:
failureThreshold: 3
httpGet:
path: /ready
port: 7800
scheme: HTTP
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 3
复制代码
Pod lifecycle Hooks
PostStart
PostStart hook在容器启动的时候运行,但并不保证该hook肯定会比容器指定的ENTRYPOINT命令先运行。就是说PostStart和ENTRYPOINT都会在容器启动后运行,至于谁先运行,谁先竣事,并不肯定,是随机的。如果容器启动的时候,PostStart没有成功,容器不会处于running状态。
PreStop
PreStop会在kubelet给Pod发送TERM信号之前执行。一般API Server会给kubelet发送竣事Pod的信号,或者Pod的liveness/startup探针失败,或别的原因导致Pod失败,kubelet会实验发送TERM信号给Pod里主进程。如果PreStop存在,kubelet则会优先启动PreStop,待PreStop竣事之后再发送TERM信号给Pod。但从API Server将Pod标记为Terminating状态开始,整个Pod停止时间不能凌驾terminationGracePeriodSeconds所设置的时间,如果凌驾,kubelet需要发送KILL信号给Pod所有的进程。
例子:
lifecycle:
postStart:
exec:
command:
- /bin/sh
- -c
- ./online.sh
preStop:
exec:
command:
- /bin/sh
- -c
- ./offline.sh
复制代码
实现
优雅上线的实现:
Pod启动后,在服务治理框架(sidecar)中开始注册服务,服务注册中心收到服务治理框架的成功注册消息。
同时服务注册中心管理系统会watch应用的Service的Endpoint,当Pod的IP出现时,服务治理框架会任务当前Pod状态ready可以上线服务了,当然Pod的IP出现在Endpoint列表中,本质也是就绪探针成功,这取决于服务治理框架的实现,一般服务治理框架需要提供探针健康检查的接口。
服务注册中心会向上下游通知当前节点上线。
Pod下线:
Pod的IP从Endpoint列表中消失,服务治理框架会通知应用,应用需要下线服务。
Pod pre stop hook执行后,服务治理框架会通知服务注册中心,服务注册中心会广播此节点下线,停止路由新调用,同时pre stop hook还可以确保服务内已经获得的请求都处置惩罚完毕,Pod才可以被回收。
更多文章
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
罪恶克星
金牌会员
这个人很懒什么都没写!
楼主热帖
2. 函数
京东张政:内容理解在广告场景下的实践 ...
从Android开发的角度比较MVC,MVP,MVVM ...
HCIA学习笔记十一:ARP地址解析协议 ...
KAFKA EAGLE 监控MRS kafka之操作实践 ...
dotnet 6 为什么网络请求不跟随系统网 ...
React技术栈 --》plugin与JSX语法使用 ...
学习ASP.NET Core Blazor编程系列十五 ...
花了两天从几十万行代码里总结出的22个 ...
在winform中绘图
标签云
挺好的
服务器
快速回复
返回顶部
返回列表