java/Kubernetes 在 google 容器引擎中 - unknownhostexception

java/Kubernetes in google container engine - unknownhostexception

我在服务中工作以从 Kafka 消费并写入 BigQuery。所述服务将在 Google 容器引擎上的 Kubernetes 中 运行。

在大多数情况下,此过程有效,但我启动的容器中约有 20% 在尝试使用 Google 进行身份验证时会失败。错误信息:

java.net.UnknownHostException: accounts.google.com
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668)
at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1316)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1291)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)
at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:77)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:981)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:283)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:384)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:217)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:868)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)

我试过暂停几秒钟然后重试(循环 3-4 次)但这似乎没有任何区别。

我认为这不是我的容器的问题,因为其中 70-80% 的容器工作正常。只有这几个似乎无法正确初始化或进入某种不可恢复的状态。

有什么办法吗?从内部 'fail' 容器的某种方式,以便 kubernetes 将重新启动它?


编辑:

到 'fail' 一个 kubernetes 容器(至少在 Java 中)只是 return 来自进程的非零值。对于 Java System.exit(2);.


编辑:

这个问题似乎与单个 kubernetes 服务器主机密切相关,而不是 necc 容器。我发现 this 参考似乎与之相关,但我不知道如何在这些系统上重新启动 docker 进程。

我在我的本地主机上也遇到过类似的错误,通常 运行 再次 gcloud container clusters get-credentials 或重新启动可以解决问题。

我还没有弄清楚根本原因是什么,但也许你可以尝试重启你的节点。

失败的pods,它们都运行在同一个节点上吗?