登录 / 注册 Account
Jump to section

在 Kubernetes 上运行 Spring

复制 URL

红帽® OpenShift® 是开发和运行 Kubernetes 原生 Spring 和 Spring Boot 应用的最佳途径。

Spring 框架是最受欢迎的 Java 框架 之一,用于构建基于分布式微服务架构的应用。Spring 面向基于 Java 的应用的编程和配置模型侧重于“管道建设”, 以便开发人员可以专注于应用级业务逻辑,无需为具体部署环境费心。然后,通过 Spring Boot 可轻松地将应用打包并配置到一个独立的可执行应用中,该应用可作为容器轻松部署到 Kubernetes

Kubernetes 原生 Spring

与许多传统的 Java 框架一样,Spring 本身并不“知道”它在一个类似 Kubernetes 的平台上的容器中运行。Spring 框架包含许多可让构建和部署分布式应用更加轻松的组件,例如 Spring Boot、Spring Cloud、Spring Web 以及执行服务发现、负载平衡、请求路由等任务的许多其他组件。借助 Kubernetes,其中的许多任务都可以委托给底层容器平台,以生成一个可更高效地与运行平台集成的应用。使用这些经过优化的代码路径构建 Spring 应用对发挥出 Spring 和 Kubernetes 组合的威力至关重要。

Spring 应用可依靠 Kubernetes 和部署到它的功能来提供所需的云服务,从而支持在 Kubernetes 上进行高效开发。这包括消息队列、数据库、永久储存和缓存等服务。

服务注册表

微服务架构通常意味着单个服务的动态扩展,在私有云、混合云或公共云中,主机的数量和地址不可能一定能提前预测或静态配置。在 Kubernetes 中,服务复制和扩展是一个核心功能。这意味着客户端不需要保留缓存,也不需要说明服务注册表本身失败的原因。例如,Netflix Ribbon(通常与 Spring 应用一起使用)可通过声明性配置为使用 Kubernetes,而不是服务注册表,期间无需更改任何代码。

负载平衡

对于 Spring 应用中无状态服务的客户端调用,高可用性(HA)意味着可转换为从服务注册表查询服务的需求,并在可用的实例中进行负载平衡。Kubernetes 提供了一个单一的服务地址,系统将对调用进行负载平衡,并重定向到一个相应的实例。在 Kubernetes 集群中,该服务名称解析到这个集群 IP 地址,并可用于访问负载平衡器。如果调用来自外部并且不希望通过路由器,可以为该服务配置一个外部 IP 地址。

容错

微服务高度分散的性质意味着远程调用风险更高,因为此类远程调用的数目在增加。过去,实施容错模式(就像断路开关)的负担落在了开发人员身上。不过,类似 Istio(实施了服务网格)的项目可以减轻这一负担,让开发人员可以更好地控制集群上运维的 Spring 服务。

外部化配置

外部化配置管理解决方案可以为典型的配置文件、命令行参数和环境变量组合提供一个巧妙的备选方案,从而让应用更具可移植性,在响应外部变化时更灵活。Kubernetes ConfigMap 可用于存储详细信息,例如,具体的属性,也可用于存储粗略的信息,例如整个配置文件或 JSON blob。它们提供了将配置数据注入容器的相关机制,从而保证配置独立于 Spring 应用,但又可通过 @ConfigProperty 这样的注释访问 Spring 应用。

分布式跟踪和应用指标

正是因为这些优势,我们很难对微服务架构进行分析和故障排除。每个业务请求都会生成对各个层的个别服务的多个调用。分布式跟踪将所有个别服务调用绑定在一起,并通过一个生成的独特 ID 将它们与业务请求关联起来。此外,指标让 Spring 应用可以显示应用级别数据,以支持对应用状态的精细检查。Jaeger 等追踪工具,与采用 PrometheusGrafana 的指标堆栈进行组合,可为监控和排除 Kubernetes 上的 Spring 应用故障打下坚实基础。

随着 Spring 应用发展成为大量的分散服务,管理这些服务之间的通信和保证其安全性变得更加困难。红帽 OpenShift红帽运行时进行组合,为 Spring 开发人员提供在行业领先的容器和 Kubernetes 混合云平台上大规模构建和管理 Spring 应用所需的工具、框架和原生 Kubernetes 集成。

Spring 开发人员使用红帽 OpenShift 好处多多。其中包括:

对于现有的和全新 Spring 应用,在 OpenShift 上使用 Spring Boot 可为开发人员提供“在 Kubernetes 上运行 Spring”的原生体验。

  • 支持使用 Spring 和 Spring Boot 构建云原生应用
  • 集成了取代传统独立后备服务的 Kubernetes 功能
    • 外部化配置:Kubernetes ConfigMap,并集成了 Spring Cloud Kubernetes
    • 服务发现:Kubernetes 服务
    • 负载平衡: Kubernetes 复制控制器
    • 自动重启: Kubernetes Health Probes,并集成 Spring Actuator
    • Metrics:Prometheus、Grafana,并集成了 Spring Cloud Sleuth
    • 使用 Istio 和 Jaeger 进行分布式跟踪
  • 通过红帽 OpenShift 中的开发人员工具和 红帽 CodeReady Studio 开发人员工具快速构建全新的 Spring 项目框架,在您喜爱的 IDE 中获得熟悉的 Spring API 的访问权限,并部署到红帽 OpenShift

红帽 OpenShift红帽应用服务中使用熟悉的 Spring API,并获得底层 Kubernetes 平台和服务的优势。

利用 Spring 知识开发采用最新技术的现代应用。

  • 采用 Camel-KKafka 的无服务器 Spring 应用
  • 使用熟悉的 Spring API 构建采用 Quarkus 的容器原生 Java 应用
  • 采用 Kogito 的原生 Kubernetes 业务流程
  • 使用 Kubernetes 操作器可以提供一种自然的方式来创建 Spring 应用,并通过 Halkyon 使用原生 Kubernetes API 并将这些应用关联在一起

扩展阅读

实训

学习场景

在 Kubernetes 和 OpenShift 上开发 Spring 和 Spring Boot 的实训学习

文档

参考架构

了解如何在 OpenShift 上架构分布式 Spring 应用。

社区

开源

进一步了解红帽通过 SnowDrop 项目构建和支持云原生 Spring 的开源方法

用于现代应用开发的 Kubernetes 基础工具

Red Hat OpenShift

红帽 OpenShift

有助于加速部署云原生应用的容器平台。

Red Hat OpenShift

用于 Apache Kafka 的红帽 OpenShift Streams

用于构建、部署和扩展应用的托管云服务。

Red Hat Runtimes

红帽运行时

一组经过精心挑选的运行时和框架,可用于开发云原生应用。

Red Hat OpenShift

红帽 OpenShift Data Foundation

适用于容器的由软件定义的存储