kubernetes中集成istio出現拉取配置中心數據失敗導致服務啓動失敗

由於在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中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章