preStop钩子与终止GracePeriodSeconds之间的关系

时间:2019-02-13 17:26:37

标签: kubernetes devops minikube kubernetes-pod kubernetes-deployment

基本上,我想尝试的是使用Pod生命周期,并检查是否可以在Pod终止之前进行一些清理/备份,例如复制日志。

我需要什么: 在终止之前将日志/堆转储从容器复制到hostPath / S3

我尝试过的事情:

我使用带有bash命令的preStop挂钩来回显消息(只是看它是否有效!)。使用了terminationGracePeriodSeconds,延迟了preStop并切换了它们以查看该过程是否有效。例如保持TerminalGracePeriodSeconds:30秒(默认值)并将preStop命令设置为睡眠50秒,并且不应生成该消息,因为容器将在此时终止。这可以按预期工作。

我的问题:

  • preStop挂钩允许(推荐)什么样的过程?由于要复制15或更多的日志/堆,将花费大量时间。然后,这一次将用于定义终止GracePeriodSeconds
  • 当preStop花费的时间超过设置的gracePeriod时,会发生什么? (以防日志很大,例如10个演出)
  • 如果我没有任何钩子但仍设置了terminationGracePeriodSeconds,会发生什么?容器会一直保持到那个宽限期吗?

我发现这篇文章与此密切相关,但是无法通过https://github.com/kubernetes/kubernetes/issues/24695

感谢所有输入!!

1 个答案:

答案 0 :(得分:2)

  

preStop挂钩允许(推荐)什么样的过程?由于要复制15或更多的日志/堆,将花费大量时间。然后,这一次将用于定义终止GracePeriodSeconds

这里没有任何内容,更多的是意见,以及您希望吊舱如何徘徊。另一个选择是让您的Pod终止并将数据存储在某个位置(例如,AWS S3,EBS),在该位置数据将在Pod生命周期内持续存在,然后使用诸如Job之类的东西来清理数据,等等。

  

当preStop花费的时间超过设置的gracePeriod时,会发生什么? (以防日志很大,例如10个演出)

您的preStop无法完成,这可能意味着数据不完整或数据损坏。

  

如果我没有任何钩子,但仍然设置了terminationGracePeriodSeconds,会发生什么?容器会一直保持到那个宽限时间吗?

这说明了顺序(来自here):

  • SIGTERM信号被发送到每个容器中的主进程,并且开始“宽限期”倒计时。
  • 如果吊舱具有preStop挂钩,则会在容器内调用它。
  • 如果容器未在宽限期内终止,则将发送SIGKILL信号并容器。