带你读《企业级云原生白皮书项目实战》——3.2.2 优雅更新(下)

简介: 带你读《企业级云原生白皮书项目实战》——3.2.2 优雅更新(下)

《企业级云原生白皮书项目实战》——第三章 容器——3.2 业务部署——3.2.2 优雅更新(上) https://developer.aliyun.com/article/1229321?groupCode=supportservice


使用场景

•Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。 例如,没有必要仅为了在安装过程中使用类似 sed、awk、python 或 dig 这样的工具而去 FROM 一个镜像来生成一个新的镜像。

•Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低。

•应用镜像的创建者和部署者可以各自独立工作,而没有必要联合构建一个单独的应用镜像。

•Init 容器能以不同于 Pod 内应用容器的文件系统视图运行。因此,Init 容器可以访问 应用容器不能访问的 Secret 的权限。

•由于 Init 容器必须在应用容器启动之前运行完成,因此 Init 容器 提供了一种机制来阻塞或延迟应用容器的启动,直到满足了一组先决条件。 一旦前置条件满足,Pod 内的所有的应用容器会并行启动。

•init 容器具有特权权限,应用容器一般情况下是没有此权限的,可以使用init 容器完成一些特权操作。

PostStart

这个回调在容器被创建之后立即被执行。但是,不能保证回调会在容器入口点(ENTRYPOINT)之前执行。 没有参数传递给处理程序。 对于 PostStart 回调,容器入口点和回调异步触发。 但是,如果回调运行或挂起的时间太长,则容器无法达到 running 状态。这个回调函数是在pod被创建后立马执行,可以认为是在pod程序运行前进行一个行为的执行,比如pod的应用程序启动比较慢或者启动时候非常消耗资源等,可以合理的设置poststart,让pod更加温和启动。

PreStop

在容器因 API 请求或者管理事件(诸如存活态探针、启动探针失败、资源抢占、资源竞争等) 而被终止之前,此回调会被调用。 如果容器已经处于已终止或者已完成状态,则对 preStop 回调的调用将失败。 在用来停止容器的 TERM 信号被发出之前,回调必须执行结束。 Pod 的终止宽限周期在 PreStop 回调被执行之前即开始所以无论 回调函数的执行结果如何,容器最终都会在 Pod 的终止宽限期内被终止。 没有参数会被传递给处理程序。

PreStop 回调并不会与停止容器的信号处理程序异步执行;回调必须在 可以发送信号之前完成执行。 如果 PreStop 回调在执行期间停滞不前,Pod 的阶段会变成 Terminating 并且一直处于该状态,直到其 terminationGracePeriodSeconds 耗尽为止, 这时 Pod 会被杀死。 这一宽限期是针对 PreStop 回调的执行时间及容器正常停止时间的总和而言的。 例如,如果 terminationGracePeriodSeconds 是 60,回调函数花了 55 秒钟 完成执行,而容器在收到信号之后花了 10 秒钟来正常结束,那么容器会在其 能够正常结束之前即被杀死,因为 terminationGracePeriodSeconds 的值 小于后面两件事情所花费的总时间(55+10)。

prestop是对于通过svc暴露服务的应用的在业务零中断的滚动更新重要考量之一。当Pod 被删除后,会被设置为 Terminating 状态,并从所有 Service 的 Endpoints 列表中删除。此时,Pod 停止获得新的流量,但依然可以处理老的流量请求,但是存在一种可能就是 Pod 收到 SIGTERM 信号并且停止工作后,但是还未从 Endpoints 或者ipvs的转发规则中移除,这时候就存在新的流量打到了停止的pod或者已经不存在的pod情况,从而造成了访问的5xx。所以建议为 pod 配置 preStop Hook,使 Pod 收到 SIGTERM 时 sleep 一段时间而不是立刻停止工作,而是相关的转发规则和endpoint移除后,pod才被终止工作,从而保证pod在终止前可以平滑的处理相关请求。

需要注意的是k8s对于pod有个参数terminationGracePeriodSeconds,默认是30s,表明pod如果prestop运行达到30s就会被立刻终止,此时如果应用的请求还未被处理完毕,依然会产生请求中断的情况,所以合理考虑和设置prestop是需要考虑的因素之一。一般情况下,我们建议terminationGracePeriodSeconds 时间建议设置为 preStop 的时间再加 30 秒以上,或者提前在镜像中写好了终止脚本,当pod收到term信号后,执行终止脚本,让应用程序优雅的主动关闭相关的连接请求。

相关文章
|
6天前
|
存储 Kubernetes Cloud Native
【阿里云云原生专栏】云原生容器存储:阿里云CSI与EBS的高效配合策略
【5月更文挑战第29天】阿里云提供云原生容器存储接口(CSI)和弹性块存储(EBS)解决方案,以应对云原生环境中的数据存储挑战。CSI作为Kubernetes的标准接口简化存储管理,而EBS则提供高性能、高可靠性的块存储服务。二者协同实现动态供应、弹性伸缩及数据备份恢复。示例代码展示了在Kubernetes中使用CSI和EBS创建存储卷的过程。
51 3
|
3天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构之容器技术
容器作为标准化软件单元,它将应用及其所有依赖项打包,使应用不再受环境限制,在不同计算环境间快速、可靠地运行。
21 9
|
4天前
|
敏捷开发 Kubernetes Cloud Native
构建高效云原生应用:容器化与微服务架构的融合
【5月更文挑战第31天】 随着云计算技术的不断演进,云原生应用已成为企业数字化转型的核心。本文深入探讨了如何通过容器化技术和微服务架构的有效结合,构建高效、弹性和可扩展的云原生应用。我们将分析容器化的基本概念、优势以及它如何促进微服务架构的实施,同时提供策略和最佳实践,帮助企业实现敏捷开发和持续部署,优化资源利用,并提高系统的可靠性。
|
5天前
|
Kubernetes 安全 Cloud Native
Rainbond 携手 TOPIAM 打造企业级云原生身份管控新体验
TOPIAM是开源的IDaas/IAM平台,旨在统一管理企业账号、权限和认证,整合各类系统,实现单点登录。通过集中式管理,它解决传统IT架构中的安全和效率问题,加强企业安全并促进数字化转型。使用Rainbond云原生应用管理平台可轻松部署TOPIAM。TOPIAM功能包括组织信息管理、身份源集成、多种认证协议、安全审计、防暴力破解和密码策略。未来将推出更多与Rainbond的结合应用案例。
Rainbond 携手 TOPIAM 打造企业级云原生身份管控新体验
|
5天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【5月更文挑战第30天】随着云计算和微服务架构的兴起,传统的运维模式已难以满足快速迭代和高可用性的需求。本文探讨了如何利用容器技术构建一个高效、可靠的自动化运维体系,重点分析了Docker和Kubernetes在这一过程中的关键作用,并提出了一套基于这些技术的持续集成(CI)与持续部署(CD)解决方案。通过实际案例和操作步骤的详细阐述,文章为读者提供了一种实现自动化运维的有效途径,同时对未来运维技术的发展趋势进行了展望。
|
5天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于容器技术的持续集成与持续部署(CI/CD)实践
【5月更文挑战第30天】 在当今快速迭代的软件开发周期中,自动化运维成为确保交付速度和质量的关键因素。本文聚焦于如何利用容器技术实现高效自动化运维体系,特别是持续集成(CI)与持续部署(CD)的实践。通过深入分析容器化工具如Docker和Kubernetes在自动化流程中的应用,以及它们如何帮助实现环境的一致性、降低部署风险并提高生产效率,本文旨在为运维专业人员提供一套切实可行的参考方案。
|
7天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【5月更文挑战第28天】在当今快速迭代的软件发布周期中,传统的运维模式已难以满足敏捷开发和市场的需求。本文将探讨如何通过容器技术实现高效的自动化运维体系,重点介绍基于Docker和Kubernetes的持续集成(CI)与持续部署(CD)的最佳实践。文章不仅涵盖技术实施细节,还包括如何优化流程、确保系统稳定性以及提高团队协作效率的策略。
|
7天前
|
运维 Kubernetes jenkins
构建高效自动化运维系统:基于容器技术的持续集成与持续部署实践
【5月更文挑战第28天】 在现代软件工程实践中,持续集成(CI)和持续部署(CD)已成为提升开发效率、确保产品质量的关键环节。本文旨在探讨如何利用容器技术构建一套高效、可靠的自动化运维系统,以支持敏捷开发流程和微服务架构。通过对Docker容器及Kubernetes集群管理工具的深入分析,我们提出了一种结合Jenkins实现自动化测试、构建与部署的完整解决方案,并讨论了其在现实业务中的应用效果和面临的挑战。
|
7天前
|
运维 Cloud Native 开发者
云原生架构的未来演进:从容器化到无服务器
【5月更文挑战第28天】 在现代IT领域,云原生技术正成为推动企业数字化转型的核心力量。本文将探讨云原生架构的关键组成部分,包括容器化、微服务以及无服务器计算,并预测这些技术的发展趋势。文章旨在提供一个全面的视角,以理解云原生生态系统如何适应日益复杂的业务需求,并支持构建更加灵活、可扩展的应用程序。
|
7天前
|
运维 Kubernetes Cloud Native
构建高效云原生应用:采用微服务架构与容器化技术
【5月更文挑战第28天】 在当今数字化转型的浪潮中,企业正迅速采纳云原生技术以保持竞争力。本文深入探讨了构建高效云原生应用的关键要素,重点分析了微服务架构和容器化技术如何共同推动应用的敏捷性、可扩展性和可靠性。通过具体案例分析,揭示了这些技术在实际业务场景中的应用效果及其带来的显著改进。

热门文章

最新文章