前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云-Istio案例分析: 业务pod连接数据库超时

腾讯云-Istio案例分析: 业务pod连接数据库超时

原创
作者头像
朱瑞卿
发布2020-11-13 16:43:14
2.2K0
发布2020-11-13 16:43:14
举报

问题背景

业务在TKE中启用了istio 服务网格, pod 连接数据库超时

进入到容器中通过命令去测试是可以直接连上, 通过entrypoint 挂载命令连接失败,用户是用了istio作为服务治理

原因分析

首先确定,客户在pod里,通过命令行是可以直接连上数据库的。并且,在命令行中执行业务脚本,也是可以运行的。只有当作为entrypoint方式启动脚本,才会失败。再加上用户使用了istio。那么最有可能的就是istio的经典问题,对 Istio 用户来说,一个常见的困扰是:sidecar 和用户容器的启动顺序:sidecar(envoy) 和用户容器的启动顺序是不确定的,如果用户容器先启动了,envoy 还未完成启动,这时候用户容器往外发送请求,请求仍然会被拦截,发往未启动的 envoy,请求异常。在 Pod 终止阶段,也会有类似的异常,根源仍然是 sidecar 和普通容器的生命周期的不确定性。负责流量转发的envoy sidecar和业务容器不能保证哪个先启动,因此导致业务容器启动后,无法连接数据库。

image.png
image.png

解决方案

目前常规的规避方案主要是有这样几种:

  • 业务容器延迟几秒启动, 或者失败重试
  • 启动脚本中主动探测 envoy 是否ready,如 127.0.0.1:15020/healthz/ready

无论哪种方案都显得很蹩脚,为了彻底解决上述痛点,从 kubernets 1.18版本开始,k8s 内置的 Sidecar 功能将确保 sidecar 在正常业务流程开始之前就启动并运行,即通过更改pod的启动生命周期,在init容器完成后启动sidecar容器,在sidecar容器就绪后启动业务容器,从启动流程上保证顺序性。而 Pod 终止阶段,只有当所有普通容器都已到达终止状态(Succeeded for restartPolicy=OnFailure 或 Succeeded/Failed for restartPolicy=Never),才会向sidecar 容器发送 SIGTERM 信号。

image.png
image.png

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题背景
  • 原因分析
  • 解决方案
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档