preStop钩子和terminationGracePeriodSeconds之间的关系

Pra*_*ade 5 kubernetes devops minikube kubernetes-deployment kubernetes-pod

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

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

我尝试过的:

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

我的问题:

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

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

所有投入表示赞赏!

Ric*_*ico 5

\n

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

\n
\n\n

这里什么都可以,这更多的是一种意见以及你希望你的豆荚如何徘徊。另一种选择是让您的 Pod 终止并将数据存储在某个位置(即 AWS S3、EBS),数据将在 Pod 生命周期结束后持续存在,然后使用Job之类的方法来清理数据等。

\n\n
\n

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

\n
\n\n

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

\n\n
\n

如果我没有任何钩子但仍设置终止GracePeriodSeconds 会发生什么?容器会一直保持到宽限期吗?

\n
\n\n

这解释了顺序:

\n\n
    \n
  • 每个容器中都会向主进程发送 SIGTERM 信号,并开始 \xe2\x80\x9cgrace period\xe2\x80\x9d 倒计时。
  • \n
  • 如果容器在宽限期内没有终止,则会发送 SIGKILL 信号并终止容器。
  • \n
\n