由于在k8s使用了grpc,所以这里我们集成istio来实现http2的自动发现以及负载均衡,但是随着节点增加,istio之前同步配置时间边长导致第一次启动时,服务启动拉取配置时istio却还没初始化好相关配置,而导致第一次启动失败,错误如下

这里有几种方案

  • 让服务启动时先暂停5s,再加载配置信息
  • 加载配置失败一直重试知道成功
  • 修改istio与业务pod启动时间间隔
  • 修改dockerfile 检查istio是否启动,启动成功后再启动业务pod

经过评估,方案1需要代码侵入,还是无法完全解决问题,
方案2 也是需要修改业务代码,很多业务都得跟着修改,改动大
方案3 这个在最新版本中的k8s有这个功能,升级有风险
方案4 侵入式小
最后选择方案四,也参考了相关资料
https://github.com/istio/istio/issues/16222

最终需要修改dockerfile来解决,并且将检查istio健康状况改成了检查配置中心是否可用

ENTRYPOINT ["/bin/sh","-c"]
CMD ["until curl --head 'http://config-center/info' ; do echo Waiting for Sidecar; sleep 3 ; done ; echo Sidecar available; java -Xmx3200m -Xms3200m -Xmn1600m -jar /app.jar --spring.profiles.active=prod "]

启动时打印信息如下


这里可以看到第一次检测也是失败,知道成功后才开始启动业务POD

当然也可以将相关命令写到deploy的yml中。

kubernetes中集成istio出现拉取配置中心数据失败导致服务启动失败 荐的更多相关文章

  1. FLUME安装&环境(二):拉取MySQL数据库数据到Kafka

    Flume安装成功,环境变量配置成功后,开始进行agent配置文件设置. 1.agent配置文件(mysql+flume+Kafka) #利用Flume将MySQL表数据准实时抽取到Kafka a1. ...

  2. service_names配置不正确,导致dg创建失败

    service_names配置不正确,导致dg创建失败 伙伴发来消息,创建dg后,主备一直无法进行日志同步. 以下是查看过程 备库的alert日志: 2018-11-13T17:47:36.23129 ...

  3. linux中mysql连接不上,服务启动失败等问题解决

    confluence问题解决方式 1)针对confluence访问页面报500与连接失败等问题 首先我们登陆部署confluence的服器 10.15.4.115 2)重启mysql服务,发现重启失败 ...

  4. Apollo 3 定时/长轮询拉取配置的设计

    前言 如上图所示,Apollo portal 更新配置后,进行轮询的客户端获取更新通知,然后再调用接口获取最新配置.不仅仅只有轮询,还有定时更新(默认 5 分钟一次).目的就是让客户端能够稳定的获取到 ...

  5. RocketMQ中PullConsumer的消息拉取源码分析

    在PullConsumer中,有关消息的拉取RocketMQ提供了很多API,但总的来说分为两种,同步消息拉取和异步消息拉取 同步消息拉取以同步方式拉取消息都是通过DefaultMQPullConsu ...

  6. Docker使用阿里云拉取配置源也无法拉取的镜像-github镜像镜像gcr.io

    我搞了一天都没搞好,最后用了这个办法解决了拉取镜像的问题 对于大部分镜像来说,我们配置源就可以,但是对于较新的镜像,没得搞啊,铁子们,真的崩溃... 最终发现可以通过Aliyun的自动构建来处理被墙镜 ...

  7. netcore项目中使用 SpringCloudConfig 和apollo做配置中心

    版权所有,转载请注明出处 https://www.cnblogs.com/netqq/p/14251403.html 一.使用apollo作为配置中心 首先apollo 项目简介和安装请自行百度,本文 ...

  8. 在kubernetes集群里集成Apollo配置中心(5)之dubbo服务消费者连接apollo实战

    1.在Apollo的portal创建dubbo消费者项目 (1)添加dubbo消费者项目 (2)在dubbo消费者项目中添加配置项 (3)发布 2.通过jenkins构建dubbo消费者镜像 3.登录 ...

  9. 拉取服务器上的项目,svn认证失败

    解决方案: 在服务器上找到对应的项目路径,并修改authz: 我的是因为[group]组下(下图中34行),我写的是[demo:/],改为[/]就可以了.

  10. ZooKeeper集群搭建中的Connection refused而导致的启动失败

    1. 前言 每一次搭建集群环境都像一次战斗,作战中任何一个细节的出错都会导致严重的后果,所以搭建中所需要做的配置如系统配置.网络配置(防火墙记得关).用户权限.文件权限还有配置文件等等内容,都必须非常 ...

随机推荐

  1. Python 安装 matlabengin 时遇到报错:setup.py install is deprecated. !! 以及 Cannot update time stamp of directory 'dist\matlabengine.egg-info' 的解决方案

    目录 Python 安装 matlabengin 时遇到报错:setup.py install is deprecated. !! 以及 Cannot update time stamp of dir ...

  2. 国内外公共 DNS调研

    结论 国内可以在以下DNS选择:114DNS.阿里DNS.(阿里请联系我,给我广告费^_^) 国外可以在以下DNS选择:谷歌DNS.1.1.1.1 DNS.Cisco Umbrella DNS. 国内 ...

  3. C#使用RegNotifyChangeKeyValue监听注册表更改的几种方式

    养成一个好习惯,调用 Windows API 之前一定要先看文档 RegNotifyChangeKeyValue 函数 (winreg.h) - Win32 apps | Microsoft Lear ...

  4. C# Linq俩个list<Datarow> 取差集,并自定义字段

    可以自定义类 ,也可以从参考官网文档:Enumerable.Except 方法 (System.Linq) | Microsoft Learn List<DataRow> list1 = ...

  5. spark共享变量---广播变量和累加变量

    从三个方面来分析:1.什么时候使用,2.原理是什么3.性能上有什么优化 累加变量:--(自定义累加器很重要) 使用场景:累加器的一个常见用途是在调试时对作业执行过程中的事件进行计数,如:统计日志中空行 ...

  6. WTM的项目中EFCore如何适配人大金仓数据库

    一.WTM是什么 WalkingTec.Mvvm框架(简称WTM)最早开发与2013年,基于Asp.net MVC3 和 最早的Entity Framework, 当初主要是为了解决公司内部开发效率低 ...

  7. 解决方案 | pyautogui实现等待特定图片(对话框)出现(可设置等待超时时间)

    1.问题 为了等待某个[转换完毕]的图片(对话框)出现,如何设置? 2.解决方案代码如下 下面代码实现的是:设置超时时间为10s,当你在完成前序工作以后,代码开始进入等待,一旦你的特定图片出现了,马上 ...

  8. Day 5 - 双指针与折半搜索

    双指针 本页面将简要介绍双指针. 引入 双指针是一种简单而又灵活的技巧和思想,单独使用可以轻松解决一些特定问题,和其他算法结合也能发挥多样的用处. 双指针顾名思义,就是同时使用两个指针,在序列.链表结 ...

  9. 如何获取安全获取苹果udid,imei

    [点击测试 https://authapi.applekuid.com](https://authapi.applekuid.com/) 目前国内有很多获取udid的方法,例如蒲公英 还有其他的网站都 ...

  10. windows下mysql服务局域网访问配置

    在局域网中访问本机(Windows)的MySQL服务器,需要确保MySQL服务器配置为允许远程访问,并且防火墙设置允许外部连接.以下是详细的步骤: 1. 修改MySQL配置文件允许远程访问 找到并编辑 ...