尤里卡和 Kubernetes

新手上路,请多包涵

我正在整理一个概念证明,以帮助识别同时使用 Spring Boot/Netflix OSS 和 Kubernetes 的问题。这也是为了证明 Prometheus 和 Graphana 等相关技术。

我有一个 Eureka 服务设置,它在我的 Kubernetes 集群中没有问题。这被命名为发现,并在使用添加到 K8 时被命名为“discovery-1551420162-iyz2c”


For my config server, I am trying to use Eureka based on a logical URL so in my bootstrap.yml I have

server:
  port: 8889

eureka:
  instance:
    hostname: configserver
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://discovery:8761/eureka/

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/xyz/microservice-config

我开始使用

kubectl run configserver --image=xyz/config-microservice --replicas=1 --port=8889

该服务最终运行命名为 configserver-3481062421-tmv4d。然后我在配置服务器日志中看到异常,因为它试图找到 eureka 实例并且无法定位。

我在本地使用带有链接的 docker-compose 对此进行了相同的设置,它可以毫无问题地启动各种容器。

 discovery:
  image: xyz/discovery-microservice
  ports:
   - "8761:8761"
configserver:
  image: xyz/config-microservice
  ports:
   - "8888:8888"
  links:
   - discovery

如何设置像 eureka.client.serviceUri 这样的东西,这样我的微服务就可以在不知道 K8 集群中的固定 IP 地址的情况下定位它们的对等点?

原文由 Andrew Rutter 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 458
1 个回答

如何设置 eureka.client.serviceUri 之类的东西?

你必须在 eureka pods/deployments 之上有一个 Kubernetes 服务,然后它会为你提供一个可参考的 IP 地址和端口号。然后使用该可引用地址来查找 Eureka 服务,而不是“8761”。

解决有关 Eureka 的 HA 配置的进一步问题

每个 k8s 服务不应该有超过一个 Eureka 的 Pod/副本(请记住,Pod 是短暂的,你需要一个可引用的 IP 地址/域名用于 eureka 服务注册表)。要实现高可用性 (HA),请启动更多 k8s 服务,每个服务都有一个 pod。

  • Eureka service 1 –> 单个 pod
  • Eureka Service 2 –> 另一个单一的 pod
  • ..
  • ..
  • Eureka Service n –> 另一个单个 pod

所以,现在你的每个 Eureka 都有可参考的 IP/域名(k8s 服务的 IP)。现在它可以相互注册了。

感觉是不是有点矫枉过正了? _如果您的所有服务都在同一个 kubernetes 命名空间中_,您可以通过 k8s 服务 + KubeDNS 附加组件实现 eureka 提供的所有内容(嗯,几乎所有内容,除了客户端负载平衡)。阅读克里斯蒂安·波斯塔的这篇 文章

编辑

正如 Stefan Ocke 指出的那样,您可以使用 StatefulSet ,而不是每个服务都有一个 pod。

与 Deployment 类似,StatefulSet 管理基于相同容器规范的 Pod。与 Deployment 不同,StatefulSet 为其每个 Pod 维护一个粘性标识。这些 pod 是根据相同的规范创建的,但不可互换:每个 pod 都有一个持久标识符,它在任何重新调度时都会维护该标识符。

原文由 so-random-dude 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进