【问题标题】:How does kubelet inform about SIGTERM signal to kubernetes node?kubelet 如何将 SIGTERM 信号通知给 kubernetes 节点?
【发布时间】:2021-10-01 17:38:25
【问题描述】:

我们每个 pod 都有一个容器。每个容器都运行一个服务,该服务侦听 SIGTERM 信号以启动其关闭过程。

要启动关机过程,

  1. kubectl delete pod [podname] 命令需要启动吗?

  2. 容器是否接收到来自 kubernetes 节点的 linux 内核的 SIGTERM 信号?

  3. 如果是,kubelet 如何通知 kubernetes 节点的内核,向特定容器抛出 SIGTERM 信号?

注意:当然 pod 只是一个网络命名空间隔离的容器

【问题讨论】:

  • 这在 Kubernetes 文档中的 Pod Lifecycle 中有详细描述。简短的回答:是的;是的;使用 kill(2)。
  • @DavidMaze 现在我明白了,kubelet 如何发送信号..
  • @tmarveen kubelet apply 命令是否也会启动容器运行时以发送SIGTERM 信号?
  • 它应该符合kubectl apply 命令规范。如果配置更新影响 Pod 导致其终止,容器运行时将收到状态更新通知,并且将向所有容器 pod 发送SIGTERM。

标签: linux docker kubernetes


【解决方案1】:

发起 pod 删除请求时

kubectl delete pods <POD>

容器运行时会发送一个TERM 信号到每个容器中的主进程。

当使用--force --grace-period=0 开关选项时,容器运行时将发送一个TERM,后跟KILL 信号。

kubectl 不会以基于容器的方式发起终止请求,而是终止在终止的 pod 内运行的所有容器。

请注意,只有在明确请求删除后者时,Pod 才会转换到 TERMINATING 状态,但这应该是 Kubernetes 如何管理集群的核心部分,这意味着由于以下原因之一,它可能会终止一个非常健康的容器:

  • 如果使用滚动更新更新部署
  • 如果节点耗尽
  • 如果节点耗尽资源

您可以查看the Pods Lifecycle documentation了解更多详情。

【讨论】:

  • 当--force --grace-period=0选项不与kubectl命令一起使用时,SIGKILL不发送吗?
  • 是的,我确实这么认为。尽管官方文档中没有类似的声明,但根据我的经验,您应该依赖SIGTERM 信号,因为它在终止时发送,无论是启动事件和使用的参数。同时,即使发送了SIGKILL 信号,您也几乎没有机会操作您的关闭工作,因为 Kubernetes 管理器会给您留下很少(如果没有的话)时间窗口。
猜你喜欢
  • 2019-08-23
  • 2019-07-24
  • 2019-03-14
  • 2020-02-17
  • 2021-03-22
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多