因爲在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