Azure Spring Apps中的零停机时间部署

注意

基本计划和标准计划于 2025 年 3 月 17 日进入退休期。 有关详细信息,请参阅 Azure Spring Apps 停用公告

本文介绍Azure Spring Apps中的零停机时间部署支持。

实现零停机时间部署是任务关键型应用程序的基本目标。 即使新版本在营业时间推出,你的应用程序也需要可用。 在Azure Spring Apps中,无需停机部署支持,即可从头到尾完成部署过程,而不会造成任何工作负荷中断。

使用蓝绿部署策略实现零停机时间

可以在 Azure Spring Apps 中使用 蓝绿色部署策略实现零停机时间。 蓝绿部署通过运行两个部署版本来消除停机时间,但在任何给定时刻,只有其中一个版本负责处理生产流量。 蓝绿部署允许在实时部署发生中断时切换到其他部署版本,从而实现零停机时间。

执行蓝绿开关时,Azure Spring Apps执行以下基础操作:

  • 如果为部署启用了 Eureka 客户端,则会覆盖 UP 部署中的实例的 Eureka 注册中心状态,并将其设置为 production
  • 如果为部署启用了 Eureka 客户端,则会覆盖 OUT_OF_SERVICE 部署中的实例的 Eureka 注册中心状态,并将其设置为 staging
  • 如果为应用启用了公共终结点,则更新入口规则以将公共流量路由到 production 部署中的实例。

注意

使用蓝绿部署,即使是对于单副本部署,也可以实现零停机时间。

使用滚动更新策略实现零停机时间

对于副本数为 2 或更高版本的部署,可以通过从 Azure Spring Apps 滚动更新策略实现零停机时间。 将新版本部署到现有部署或重启部署时,Azure Spring Apps使用基础 Kubernetes 滚动更新来执行更新。

滚动更新通过使用新实例以增量方式更新实例,使部署更新在不停机的情况下进行。 如果部署有两个或以上副本,则在执行滚动更新时,你的应用程序会继续为生产流量提供服务。 有关详细信息,请参阅执行滚动更新

警告

对于单副本部署,在部署更新期间可能会发生停机。 若要确保应用程序可用性,建议为生产工作负载部署至少两个副本。

注意

若要正常启动或关闭应用程序,必须为部署配置运行状况探测。 有关详细信息,请参阅 如何为托管在 Azure Spring Apps 中的应用配置运行状况探测和正常终止期。 Kubernetes 在滚动更新过程中检查这些探针,Nginx 入口控制器将流量路由到就绪探针成功的实例。

在缩减应用程序实例时,Azure Spring Apps 使用基础 Kubernetes Container Lifecycle Hooks 来优雅地关闭 Pod。

在挂钩中,Azure Spring Apps对关闭应用程序容器执行以下操作:

  • 如果启用了 Eureka 客户端,将覆盖并设置实例的 Eureka 注册表状态为 OUT_OF_SERVICE
  • 等待几秒钟以继续处理来自 Nginx 或其他应用程序的任何流量,然后 Kubernetes 关闭应用程序容器。

后续步骤