当前位置:主页 > 查看内容

数据面sidecar升级不中断业务_应用服务网格 ASM_最佳实践

发布时间:2021-09-26 00:00| 位朋友查看

简介:应用服务网格作为集群网络管理的重要工具,为网格内的服务提供流量治理与流量监控的能力。sidecar作为应用服务网格数据面的重要组件,需要依赖服务业务pod的更新来实现sidecar的升级和重新注入。 本章节主要介绍如何实现数据面sidecar升级过程中,不中断服务……

应用服务网格作为集群网络管理的重要工具,为网格内的服务提供流量治理与流量监控的能力。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

nginx支持配置-s命令,优雅关闭进程。

类似的,您可以选择运行自定义命令或自定义脚本,来优雅关闭您的服务进程。


本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:私有网络 查询带宽包配额 - API文档 下一篇:没有了

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐