数据面sidecar升级不中断业务-凯发k8国际娱乐官网入口
应用服务网格作为集群网络管理的重要工具,为网格内的服务提供流量治理与流量监控的能力。sidecar作为应用服务网格数据面的重要组件,需要依赖服务业务pod的更新来实现sidecar的升级和重新注入。
本章节主要介绍如何实现数据面sidecar升级过程中,不中断服务的业务流量。
配置服务实例数
为保证您的服务在sidecar升级的过程中不中断业务流量,首先确保您的服务实例数大于等于2,升级策略为滚动升级(rollingupdate)。
相关滚动升级策略如下,供参考:
kubectl get deploy nginx -n namespace_name -oyaml | grep strategy -a10
配置项说明:
- 服务实例数:deployment.spec.replicas >= 2
- 升级策略:deployment.spec.strategy.type == rollingupdate
- 滚动升级最小存活实例数:deployment.spec.replicas - deployment.spec.strategy.maxunavailable > 0
添加readiness探针
添加readiness探针,可以保证您的新实例pod在真正准备就绪时,才开始接管业务流量。这就避免了在新的实例pod未启动时,接管业务流量造成的访问不通问题。
相关配置如下:
kubectl get deploy nginx -n namespace_name -oyaml | grep readinessprobe -a10
配置项说明:
readiness探针配置项:deployment.spec.template.spec.containers[i].readinessprobe
其中,包括探针检查初始时间,检查间隔,超时时间等配置。
设置服务就绪时间
服务就绪时间,minreadyseconds:用于标识pod的ready时间至少保持多长时间,才会认为服务是运行中。
相关配置如下:
kubectl get deploy nginx -n namespace_name -oyaml | grep minreadyseconds -a1
配置项说明:
服务就绪时间:deployment.spec.minreadyseconds,可根据您业务的实际情况确定。
配置优雅关闭时间
terminationgraceperiodseconds,优雅关闭时间。在滚动升级过程中,首先会移除旧的服务实例pod的endpoint,并将实例pod的状态置为terminating,这时k8s会发送sigterm信号给pod实例,并等待优雅关闭时间后,将pod强制终止。您可以利用这段时间,处理未完成的请求:
kubectl get deploy nginx -n namespace_name -oyaml | grep terminationgraceperiodseconds -a1
配置项说明:
优雅关闭时间:deployment.spec.template.spec.terminationgraceperiodseconds,默认值为30s,可根据业务诉求适当调整。
配置prestop
prestop会在实例pod中止前调用,可以用来实现业务pod的优雅关闭。此处需要根据业务诉求来进行相应的配置,以nginx为例。
kubectl get deploy nginx -n namespace_name -oyaml | grep lifec -a10
在“lifecycle”下的“prestop”中,定义了一个命令nginx -s quit; sleep 10,这个命令首先会发送一个优雅关闭信号给nginx进程,然后暂停10秒。这样,在pod终止之前,nginx会有足够的时间完成正在处理的请求并优雅地关闭。
需要注意的是,sleep 10中的10秒是一个示例值,您可以根据实际需要和应用程序的性能来调整这个值,关键是为nginx提供足够的时间来优雅地关闭。
类似地,您可以选择运行自定义命令或自定义脚本,来优雅关闭您的服务进程。
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨