k8s中prestop钩子执行命令后的行为?

优雅停机,关于k8s可配置的prestop钩子。例如我采用exec执行命令行的形式,命令行执行正常返回0之后,k8s依然会等到宽限期到达才会删除pod而非是exec命令执行成功后立刻删除pod

在k8s的官方文档中没有找到这个问题的解答

阅读 1.5k
avatarAI BotBETA

preStop 是在 Kubernetes 中定义的一种生命周期钩子,它允许你在容器即将被终止之前执行一些命令。这个钩子的主要目的是让你可以在容器被终止之前执行一些清理工作,比如关闭日志,释放资源等。

关于你的问题,preStop 钩子执行命令后,Kubernetes 不会立即删除 Pod。这是因为 preStop 钩子的执行并不影响 Pod 的删除。preStop 钩子只是在 Pod 被删除之前执行一些清理工作,但它并不会改变 Pod 删除的时间。

在 Kubernetes 中,Pod 的删除是通过 API Server 发出的 DELETE 信号触发的。无论 preStop 钩子是否执行成功,API Server 都会在接收到 DELETE 信号后开始删除 Pod。如果 preStop 钩子执行成功,那么在 Pod 被删除之前,它将先执行 preStop 钩子中的清理工作。然而,如果 preStop 钩子执行失败,Pod 仍然会被删除,但在删除之前,它会返回一个错误状态。

至于你提到的 "宽限期",这实际上是 Kubernetes 为 Pod 删除提供的一个延时。这是为了防止 API Server 在短时间内频繁地删除和创建 Pod,从而避免对 Kubernetes 集群性能的影响。这个宽限期是默认存在的,且不能被修改。如果一个 Pod 在被删除后立刻重新创建,那么新的 Pod 将在旧的 Pod 完全删除后才会被创建。

因此,preStop 钩子执行命令后,Kubernetes 并不会立刻删除 Pod,而是会等待 preStop 钩子中的清理工作完成后再进行删除。即使 preStop 钩子执行失败,Pod 也仍然会被删除,但会在删除之前返回一个错误状态。

1 个回答

https://kubernetes.io/docs/concepts/containers/container-life...

PreStop

This hook is called immediately before a container is terminated due to an API request or management event such as a liveness/startup probe failure, preemption, resource contention and others. A call to the PreStop hook fails if the container is already in a terminated or completed state and the hook must complete before the TERM signal to stop the container can be sent. The Pod's termination grace period countdown begins before the PreStop hook is executed, so regardless of the outcome of the handler, the container will eventually terminate within the Pod's termination grace period. No parameters are passed to the handler.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题