龙空技术网

当 Spring Cloud 遇上 Kubernetes

杨同学编程 221

前言:

如今兄弟们对“kuberneteseureka”大致比较关注,大家都需要分析一些“kuberneteseureka”的相关内容。那么小编也在网上搜集了一些对于“kuberneteseureka””的相关资讯,希望你们能喜欢,咱们快快来了解一下吧!

完整的微服务框架不完整了

照片由Nikola Johnny Mirkovic在Unsplash上拍摄

客户在微服务顾问的工作完成后,有感而发:

自以为成功了微服务架构,不知导入了 Kubernetes 之后,和 Cloud Native 的 Spring 生态发展却脱节了。

Spring Boot Spring Cloud,将许多部署到的,一直以来开发的(因为一个大企业的微服务),也有很多资源已经从一个完整的解决方案商业开放生态,可以了。

这对于许多想要导入微服务架构的企业来说,是一个想要的进入点,只要你导入Spring Cloud,并采用生态内相关的最佳组件,构建出其架构,绝对打造出一套微服务架构,不会有什么问题,正确的选择。

只是导入了 Kubernetes 之后,似乎一切都变了调。

导入 Kubernetes 又到底发生了什么问题?我们接下来该如何解决?

Kubernetes 与 Spring Cloud 的冲突点?

开发者非常幸运,Spring Cloud这样的微服务可以完整使用,至少微服务支持下的基本需求,有能力满足。这个开发框架出自自己的微服务架构。

但也由于 Spring Cloud 的生态系统具备开发完整的微服务组件,在今天 Kubernetes 的情况下,当把基于 Spring Cloud 的各种服务放在 Kubernetes 上之后,机制将自成一格,不受Kubernetes生态系的工具和机制所管控。

这一切的原因,都是从扩展部署、维运面出发的 Kubernetes,在最包容、应用部署及网络层管理的基础之上,已经逐步实现并贴出应用层的一些需求,而不是微服务架构下的基础需求(如:Service Discovery、API Gateway 等)开始直接或直接被纳入到 Kubernetes 的生态里。

这代表着两方组件的功能覆盖,而且只能选择使用,放弃你选择了 Spring Cloud 的解决方案,就可以让你摆脱 Kubernetes 那一边的机制。

服务发现(服务发现)

服务,在 Spring Cloud 的经典解决方案中,最知名的发现不外乎是 Netflix Eureka 和 Hashicorp。主要原理是在其服务部署时,自己的服务,让其他的服务查询找到。

但在服务的领域,服务的注册和是由服务组件所负责,连线名称,发现利用 Kubernetes 的内部来实现的功能。这代表我们将服务于 Kubernetes 的服务机制。

为了解决这个需求,解决方案中提供了 DiscoveryClient 这个组件,让基于 Spring Cloud 所开发的应用程序,可以方便查询其他服务。

使用了 Kubernetes 才能被追踪到的服务发现,才能成为服务网格,未来纳入 Service Mesh 的管辖范围。

设定参数管理(配置管理)

在设置参数管理上,Spring Cloud 也有一些现有的解决方案,例如:Consult 或 Netflix Archaius 等。但在 Kubernetes 上,有 ConfigMap 和 Secret 可以,而且通常还会用于 Vault 来管理敏感设置。

官方的解决方案提供了 ConfigMapPropertySource 和 SecretsPropertySource 的参考实作,来访问 Kubernetes 上的 ConfigMap 和 Secret。

负载平衡器和熔断器(负载平衡和断路器)

在 Spring Cloud 经常断断续续的负载均衡问题组件 Netflix Ribbon 和任务熔断器 Hystrix,但在 Kubernetes 的世界,有 Service 组件可以实现负载均衡,以及st可以实现熔断器,开发者通常不用这个。

平衡平衡器的工作,会依赖故障,因此,Ribb 和 Hytrix 的服务官方解决机制发现了在 Kubernetes 的功能解决机制上的问题。 ,但由于相关实作链接已经消失,因此这部分不再做多说明。

以自己的实际情况建议,避免使用客户端平衡和熔断器的负载能力。

原有的服务注册(Service Registry)机制将失效

Spring Cloud原本有自己的服务注册机制,通过下面的设置可以影响服务注册的行为:

spring.cloud.service-registry.auto-registration.enabled@EnableDiscoveryClient(autoRegister=false)

在 Kubernetes 的发现环境下将失效,服务不再由 Spring Cloud 的框架所带来。

补充

Spring Cloud 与 Kubernetes 生态系之间的备选方案对照组

Spring Cloud 官方解决方案除了所提出的方案之外,此处其他维运表示的部分也同样有可参考的图表。

可以完全不理会 Kubernetes 的组件,完全采用 Spring Boot 和解决方案的框架和框架,然后只把 Kubernetes 当作是部署应用程序的工具和平台。但在未来,Service Mesh 及其他的云原生技术发展,与我们脱节,无法与我们的应用程序深入整合。

后记

更多于Spring Cloud的一些生态语言,以Java语言,Kubernetes的生态发展和设计更为通用且更广泛的生态内元件功能,在Kubernetes包含除了支持以外,甚至具有整合性和广泛性及扩展性及量的功能。

CNCF 的各种方案及更多的运筹方案,波澜新的、维系方法、整合能力都出层的工具。因此,在导入微架构时,关于 Kubernetes 的各种推动解决方案的各种问题,都需要参加各种评估测试。

网路上很多和 Spring Boot 的教学设施,但有很多是 Spring Boot 的文献记载,当时和已经在最初的那个时候和现在的时间段之间写了一些文件,可能现在的 Kubernetes 建立了书籍和 Spring Cloud 的基础设施(基础设施)环境有落差,这是需要特别注意的部分。

如果您对微服务架构和生态环境有任何疑问,则需要对技术上的评估和建议,欢迎与我们Brotherbridge,取得专业的培训和顾问联系服务。

标签: #kuberneteseureka