我有一個kubernetes集羣,其中一個服務(java應用程序)連接到另一個服務來寫入數據(elasticsearch)。java中的Kubernetes服務不能解決重啓服務/複製控制器
當elasticsearch(服務& replicationcontroller)重新啓動/重新部署時,java應用程序失去了它的連接,只能通過重新啓動java應用程序(rc)來恢復它。這不是理想的行爲,應該解決。
從應用程序的kubernetes窗格使用curl查詢elasticsearch在重新啓動後可以正常工作,所以它肯定可能是java正在做的事情。
當只有elasticsearch的複製控制器被觸摸時,它才能工作,使服務保持原樣。但爲什麼curl在這種情況下工作,但這不應該是解決方案。
在沒有kubernetes的本地docker設置中使用相同的konfiguration也不會導致問題。
未曾希望的解決方案:
- 設置
networkaddress.cache.ttl
或networkaddress.cache.negative.ttl
爲零(或其他小正值) - 黑客在https://stackoverflow.com/a/32550032/363281
描述我使用kubernetes 1.1.3,OpenJDK 8u66,服務Dockerfile源自java:8
這是一個黑暗中的刺,但也許嘗試像這裏的getSeeds()函數 https://github.com/kubernetes/kubernetes/blob/master/examples/cassandra/java/src/ io/k8s/cassandra/KubernetesSeedProvider.java 在您的Java應用程序中? – DavidO