kubernetes系列之九:kubernetes container的lifecycle hook

一、前言

在传统操作系统环境下,我们每个应用程序在启动之前都需要进行一些准备工作而结束之前都需要进行一些清理工作,这样才能保证系统环境的一致性。在容器云环境下,容器的启动和删除是相对频繁的行为,如何在这样的环境中处理好环境一致性问题,Kubernetes的容器 lifecycle hook可以解决这个问题。

POD的life cycle hook包括如下两种:

  • PostStart
  • PreStop

转载自https://blog.csdn.net/cloudvtech

二、PostStart Hook

该hook在容器被创建后立刻触发;并且无法保证会在容器的ENTRYPOINT之前执行。由于无法保证和容器内其它进程启动的顺序相关联,所以不是应用程序进行启动前配置的最佳解决方案。如果要在应用程序启动前配置系统,可以使用Init Container。Init Container可以按照定义串联执行,并且执行结果可以为后面的Init Container或者主容器所看到。

在一些特殊案例中,PostStart可以用来进行一些系统环境的配置,比如配置iptables或者kernel参数。

转载自https://blog.csdn.net/cloudvtech


三、PreStop Hook

该hook在容器被删除前触发,由于这个hook是同步执行的,所以必须在容器被删除之前执行完成这个hook。这个Hook是很适合作为应用程序优雅退出的机制的,可以定义一系列的行为来释放容器占有的资源、进行通知和告警来实现优雅退出。

转载自https://blog.csdn.net/cloudvtech

四、Hook的运行方式

POD的hook可以通过如下两种方式定义:

  • exec,在容器内执行一个命令
  • HTTP,访问容器内部的HTTP服务

Hook如果执行失败,都会导致容器被删除。

这里需要考虑的一个问题在容器crash的情况下,将没有机会进行PreStop操作,那么那个角色以那种方式帮助容器在退出之后清理资源或者进行其它操作将是一个问题。可能在应用程序层面需要一个全局的管理者,或者Kubernetes需要额外提供这样的全局管理级别的Hook。

转载自https://blog.csdn.net/cloudvtech



你可能感兴趣的:(container,容器,kubernetes,docker,POD,lifecycle,Kubernetes系列)