赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. Serverless应用引擎(新版)
  4. 操作指南
  5. 应用部署
  6. 设置应用生命周期管理

设置应用生命周期管理

  • 应用部署
  • 发布于 2025-04-17
  • 0 次阅读
文档编辑
文档编辑

如果您精通K8s,且需要在应用容器启动前或者关闭前执行相关操作,例如运行前部署资源或者停止前优雅下线应用,可以设置应用生命周期管理。本文主要介绍如何在SAE应用中配置PostStart、PreStop和TerminationGracePeriodSeconds。

功能介绍

  • Pod hook(容器钩子)是由Kubernetes管理的kubelet组件发起的机制,用于在容器的生命周期的关键阶段执行自定义任务。这些阶段包括容器进程启动前(preStart)和终止前(preStop)。钩子的引入使Kubernetes能够更加灵活和精细地管理容器的生命周期。更多信息,请参见Container Lifecycle Hooks。

    • 启动后处理(PostStart设置):是容器生命周期中的一种钩子,该钩子在容器被创建后立刻触发,通知容器它已经被创建。该钩子不需要向其所对应的hook handler传入任何参数。如果该钩子对应的hook handler执行失败,则该容器会被关闭,并根据该容器的重启策略决定是否重启该容器。

    • 停止前处理(PreStop设置):是容器生命周期中的一种钩子,该钩子在容器终止前触发,通常用于执行清理操作或优雅地关闭服务。其对应的hook handler必须在Kubernetes向容器发送终止信号(如 SIGTERM)之前完成。无论hook handler的执行结果如何,一旦其完成,Kubernetes将向容器发送SIGTERM信号以终止容器,并根据配置等待一段时间后强制删除容器。

  • 优雅下线超时设置(TerminationGracePeriodSeconds):其主要作用是为容器的优雅终止提供时间保障,确保应用能够在被强制停止之前完成必要的清理和关闭操作。这不仅有助于提升系统的稳定性和可靠性,还能避免因强制终止导致的数据丢失、请求失败和服务不可用等问题。结合 PreStop钩子可以实现完整的优雅下线流程。

功能入口

操作入口在不同场景下有差异:

创建应用

  1. 登录SAE控制台,在左侧导航栏选择应用管理 > 应用列表,然后选择目标地域和目标命名空间,最后单击创建应用。

  2. 在应用基本信息向导页面进行配置后,单击下一步:高级设置。

  3. 在高级设置页面,找到并展开应用生命周期管理区域。

对正在运行的应用进行变更

警告

重新部署应用后,该应用将会被重启。为避免业务中断等不可预知的错误,请在业务低峰期执行部署操作。

  1. 登录SAE控制台,在左侧导航栏选择应用管理 > 应用列表,然后选择目标地域和目标命名空间,最后单击目标应用名称。

  2. 在目标应用的基础信息页面,单击部署应用。

  3. 在部署应用页面,找到并展开应用生命周期管理区域。

对已停止的应用进行变更

  1. 登录SAE控制台,在左侧导航栏选择应用管理 > 应用列表,然后选择目标地域和目标命名空间,最后单击目标应用名称。

  2. 在目标应用的基础信息页面,单击修改应用配置。

  3. 在修改应用配置页面,找到并展开应用生命周期管理区域。

操作步骤

在应用生命周期管理区域,按需配置启动后处理(PostStart设置)、停止前处理(PreStop设置)和优雅下线超时设置(TerminationGracePeriodSeconds)。

建议您把三者全部进行配置,以实现容器完整的生命周期管控闭环,保障服务平滑启停、资源有序释放及业务零中断。

启动后处理(PostStart设置)

在应用生命周期管理区域的启动后处理(PostStart设置)页签配置PostStart。

说明

SAE提供了两种不同的Shell解释器可供您选择,分别是:

  • >_ /bin/sh

  • >_ /bin/bash

例如应用启动前,需要将Hello from the postStart handler内容写入/usr/share/message文件。

在生产环境中,请根据实际业务场景进行配置。本文提供的示例仅为最小化验证配置功能可用性,不可直接用于生产环境。

oNFSDw9bjS

结果验证:

应用创建或重新部署完成后,使用Webshell进入应用实例的字符界面,查看/usr/share/message文件是否存在并写入了相应的内容。

R5oYr5WL5f

停止前处理(PreStop设置)

在应用生命周期管理区域的停止前处理(PreStop设置)页签配置PreStop。

说明

SAE提供了两种不同的Shell解释器可供您选择,分别是:

  • >_ /bin/sh

  • >_ /bin/bash

例如在容器终止前执行Perform cleanup操作并将其写入到/cleanup.log文件中,然后等待100秒以便进行验证。

在生产环境中,请根据实际业务场景进行配置。本文提供的示例仅为最小化验证配置功能可用性,不可直接用于生产环境。

je7qGGznHp

结果验证:

在应用的基础信息页面,单击停止应用,然后使用Webshell进入应用实例的字符界面,查看/cleanup.log文件是否存在并写入了相应的内容。

fEznm2T8Jm

优雅下线超时设置(TerminationGracePeriodSeconds)

在应用生命周期管理区域的优雅下线超时设置(TerminationGracePeriodSeconds)页签配置优雅下线超时时间。

如果您设置的优雅下线超时时间小于容器优雅终止的时间(包括PreStop钩子执行耗时和容器处理SIGTERM耗时),则在优雅下线超时时间耗尽时强制终止(信号名称:SIGKILL,退出码:137)容器,导致优雅终止流程中断。例如容器优雅终止的时间为100秒,而设置的优雅超时时间为60秒,那么容器会在优雅终止之前被杀死。

bXgkgc94CQ

结果验证:

本示例中,设置的优雅超时时间小于容器优雅下线时间,以便结果验证。

在应用的基础信息页面,单击停止应用,然后使用Webshell进入应用实例的字符界面,查看容器是否会报137的退出码。

容器在优雅下线阶段,容器会一直处于Terminating状态,直到超过设置的优雅超时时间。

51N2ViXRg9

相关文章

通过镜像部署应用 2025-04-17 11:01

您可以将应用制成镜像并部署到SAE。镜像可来源于ACR镜像仓库、公开访问的镜像仓库或自建的私有镜像仓库。 尽管您可以直接部署公共镜像仓库(例如Docker Hub、Harbor、GitHub Container Registry)中提供的基础镜像,但通常情况下这些镜像无法完全满足业务需求,您需要结合

通过代码包部署应用 2025-04-17 11:00

完成本地应用开发后,您可以将代码按照SAE要求的格式打包后,上传到SAE进行部署。针对不同语言开发的应用,请参见: Java应用 PHP应用 Python应用

设置启动命令 2025-04-17 11:00

通过SAE控制台使用容器镜像或代码包方式部署应用时,SAE会根据预设的启动参数来启动容器。如果需要在容器启动执行特殊配置(例如Nginx)或不采用预设的启动参数,您可以通过SAE自定义容器的启动命令,以实现特殊配置或覆盖镜像的启动默认参数。

设置环境变量 2025-04-17 11:00

应用在系统中运行需要配置特定的环境变量,如Java应用程序在配置Java_home及其Path后,其相关命令才可以被执行。本文介绍如何在SAE控制台上为应用设置环境变量,包括自定义环境变量和从命名空间配置项、保密字典中引入的环境变量。

服务注册与发现 2025-04-17 11:00

您可以根据所需的技术栈,选用微服务注册中心(例如Nacos、Zookeeper等)实现服务注册与发现,或者基于K8s Service Name实现服务间调用: 基于Nacos等注册中心实现服务注册与发现

设置Hosts绑定 2025-04-17 11:00

SAE支持应用级别的实例,通过Hosts绑定对主机名进行解析,方便应用实例通过主机名进行访问。本文介绍如何在SAE控制台设置Hosts绑定。

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号