因为在k8s使用了grpc,因此这里咱们集成istio来实现http2的自动发现以及负载均衡,可是随着节点增长,istio以前同步配置时间边长致使第一次启动时,服务启动拉取配置时istio却还没初始化好相关配置,而致使第一次启动失败,错误以下 这里有几种方案java
通过评估,方案1须要代码侵入,仍是没法彻底解决问题, 方案2 也是须要修改业务代码,不少业务都得跟着修改,改动大 方案3 这个在最新版本中的k8s有这个功能,升级有风险 方案4 侵入式小 最后选择方案四,也参考了相关资料 https://github.com/istio/istio/issues/16222git
最终须要修改dockerfile来解决,而且将检查istio健康情况改为了检查配置中心是否可用github
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 "]
启动时打印信息以下spring
这里能够看到第一次检测也是失败,知道成功后才开始启动业务PODdocker
固然也能够将相关命令写到deploy的yml中。app