4

基本上,我想做的是玩转 pod 生命周期,并检查我们是否可以在 pod 终止之前进行一些清理/备份,例如复制日志。

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

我尝试了什么:

我使用带有 bash 命令的 preStop 钩子来回显一条消息(只是为了看看它是否有效!!)。使用带有延迟的terminationGracePeriodSeconds preStop 并切换它们以查看该过程是否有效。前任。保持 terminateGracePeriodSeconds:30 秒(默认)并将 preStop 命令设置为休眠 50 秒,并且不应生成消息,因为届时容器将被终止。这按预期工作。

我的问题:

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

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

所有输入表示赞赏!

4

1 回答 1

4

preStop 钩子允许(推荐)什么样的进程?因为复制 15 个或更多的日志/堆转储将花费大量时间。然后这个时间将用于定义终止GracePeriodSeconds

任何事情都在这里,更多的是一种意见,以及您希望您的豆荚如何徘徊。另一种选择是让您的 pod 终止并将您的数据存储在某个地方(即 AWS S3、EBS),其中数据将在 pod 生命周期之后持续存在,然后使用诸如Job之类的东西来清理数据等。

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

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

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

这解释了以下顺序:

  • SIGTERM 信号被发送到每个容器中的主进程,“宽限期”倒计时开始。
  • 如果容器没有在宽限期内终止,则会向容器发送 SIGKILL 信号。
于 2019-02-13T22:41:06.830 回答