【问题标题】:hazelcast-kubernetes Unable to start Embedded serverhazelcast-kubernetes 无法启动嵌入式服务器
【发布时间】:2020-03-10 18:05:36
【问题描述】:

我正在尝试在 kubernetes 上的 Spring Boot 应用程序中启动一个简单的嵌入式 hazelcast 服务器。 我正在使用 hazelcast-kubernetes 插件并遵循文档here。 我尝试了 LoadBalancer 和 NodePort 服务类型。

我还尝试使用this example(使用相同的 docker 映像)部署示例应用程序,并尝试了 LoadBalancer 和 NodePort 服务类型。

在这两种情况下,我在重试 10 次以连接到 Kubernetes Master 后都会收到以下错误。 其中 a.b.c.d 是 Kubernetes 主节点的 IP 地址。

2020-03-09 18:20:57.322  INFO 1 --- [           main] c.h.c.LifecycleService                   : [a.b.c.d]:5701 [dev] [3.12] [a.b.c.d]:5701 is STARTING
2020-03-09 18:20:57.820  WARN 1 --- [           main] c.h.k.RetryUtils                         : Couldn't connect to the Kubernetes master, [1] retrying in 1 seconds...
2020-03-09 18:20:59.339  WARN 1 --- [           main] c.h.k.RetryUtils                         : Couldn't connect to the Kubernetes master, [2] retrying in 2 seconds...
2020-03-09 18:21:01.713  WARN 1 --- [           main] c.h.k.RetryUtils                         : Couldn't connect to the Kubernetes master, [3] retrying in 3 seconds...
2020-03-09 18:21:05.113  WARN 1 --- [           main] c.h.k.RetryUtils                         : Couldn't connect to the Kubernetes master, [4] retrying in 5 seconds...
2020-03-09 18:21:10.198  WARN 1 --- [           main] c.h.k.RetryUtils                         : Couldn't connect to the Kubernetes master, [5] retrying in 7 seconds...
2020-03-09 18:21:17.807  WARN 1 --- [           main] c.h.k.RetryUtils                         : Couldn't connect to the Kubernetes master, [6] retrying in 11 seconds...
2020-03-09 18:21:49.216  WARN 1 --- [           main] c.h.k.RetryUtils                         : Couldn't connect to the Kubernetes master, [7] retrying in 17 seconds...
2020-03-09 18:22:06.319  WARN 1 --- [           main] c.h.k.RetryUtils                         : Couldn't connect to the Kubernetes master, [8] retrying in 25 seconds...
2020-03-09 18:22:31.963  WARN 1 --- [           main] c.h.k.RetryUtils                         : Couldn't connect to the Kubernetes master, [9] retrying in 38 seconds...
2020-03-09 18:23:15.423  WARN 1 --- [           main] c.h.k.RetryUtils                         : Couldn't connect to the Kubernetes master, [10] retrying in 57 seconds...
2020-03-09 18:24:23.099 ERROR 1 --- [           main] c.h.i.c.i.DiscoveryJoiner                : [a.b.c.d]:5701 [dev] [3.12] Failure in KubernetesClient
com.hazelcast.kubernetes.KubernetesClientException: Failure in KubernetesClient
        at com.hazelcast.kubernetes.DefaultKubernetesClient.callGet(DefaultKubernetesClient.java:109) ~[hazelcast-kubernetes-1.3.1.jar!/:?]
        at com.hazelcast.kubernetes.DefaultKubernetesClient.endpointsByName(DefaultKubernetesClient.java:88) ~[hazelcast-kubernetes-1.3.1.jar!/:?]
        .
        .
        .       
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [main.jar:?]
Caused by: java.net.UnknownHostException: kubernetes.default.svc
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[?:1.8.0_111]
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[?:1.8.0_111]

在第二种情况下,我使用 leszko 的 sample,它尝试连接的 ip 地址是 POD 的 IP。

[190.168.1.194]:5701 [dev] [3.11] KubernetesClient 失败

190.168.1.194 是 POD 的 IP 地址

我将以下 env 添加到部署 yaml 中,但看起来它并没有覆盖这个变量。

env:
           - name: service-name
             value: "hazelcast-embedded"

Kubernetes Discovery properties: { service-dns: null, service-dns-timeout: 5, service-name: null, service-port: 0, service-label: null, service-label-value: true, namespace: default, resolve-not-ready-addresses: false, kubernetes-master: https://kubernetes.default.svc}

【问题讨论】:

  • 您可以尝试使用 com.hazelcast:hazelcast:4.0 和 com.hazelcast:hazelcast-kubernetes:2.0.1 吗?您只需启用 Kubernetes 发现并将 DNS 设置为 `service-dns: yourservicename.default.svc.cluster.local'
  • 感谢您的评论。我只是尝试你的建议。我收到此错误Mar 10, 2020 7:54:12 PM com.hazelcast.spi.discovery.integration.DiscoveryService WARNING: [10.224.95.88]:5701 [dev] [4.0] DNS lookup for serviceDns 'haz-server.default.svc.cluster.local' failed javax.naming.CommunicationException: DNS error [Root exception is java.net.SocketTimeoutException: Receive timed out]; remaining name 'haz-server.default.svc.cluster.local' at com.sun.jndi.dns.DnsClient.query(DnsClient.java:309) at com.sun.jndi.dns.Resolver.query(Resolver.java:81)
  • 您的 kubernetes 集群中是否存在与 DNS 相关的问题? stackoverflow.com/questions/21521309/…

标签: spring-boot kubernetes hazelcast


【解决方案1】:

您的 Kubernetes 集群本身似乎有问题。

  1. 首先,您尝试使用 Hazelcast Kubernetes 发现策略 Kubernetes API,它对 Kubernetes 主服务器进行 REST 调用。 Kubernetes master 应该始终可以通过主机名kubernetes.default.svc 从您的 POD 访问。在你的情况下,它没有找到。

  2. 然后,您尝试使用 Hazelcast Kubernetes 发现策略DNS Lookup,它使用服务 DNS 来解析 Hazelcast 成员。在您的情况下,正如@Mesut 所述,它无法正确解析服务的 DNS。

【讨论】:

  • 这一定是我本地 K8s 设置的问题。我尝试在 GCP k8s 集群上运行它,并且能够使用 Kubernetes API 和 DNS 发现方法启动我的应用程序。我只有 2 个后续问题。如果您能在这里发表评论,那就太好了 1. 在 Kubernetes API 和 DNS 之间,有推荐的方式吗? 2.客户端如何连接hazelcast服务器?我知道我们只需要@Autowired hazelcastInstance,但在内部,客户端需要什么来建立连接。
猜你喜欢
  • 2020-05-18
  • 2020-10-14
  • 1970-01-01
  • 2019-10-11
  • 2019-08-29
  • 2020-12-19
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多