优雅停机,关于k8s可配置的prestop钩子。例如我采用exec执行命令行的形式,命令行执行正常返回0之后,k8s依然会等到宽限期到达才会删除pod而非是exec命令执行成功后立刻删除pod
在k8s的官方文档中没有找到这个问题的解答
优雅停机,关于k8s可配置的prestop钩子。例如我采用exec执行命令行的形式,命令行执行正常返回0之后,k8s依然会等到宽限期到达才会删除pod而非是exec命令执行成功后立刻删除pod
在k8s的官方文档中没有找到这个问题的解答
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 也仍然会被删除,但会在删除之前返回一个错误状态。
8 回答2.8k 阅读
2 回答5.2k 阅读✓ 已解决
5 回答1.4k 阅读
3 回答2.2k 阅读
1 回答851 阅读✓ 已解决
2 回答781 阅读✓ 已解决
2 回答915 阅读✓ 已解决
https://kubernetes.io/docs/concepts/containers/container-life...