kubernetes 节点关闭/崩溃恢复?

Joh*_*her 2 kubernetes

我们有一个集群,有一个主节点(foo-1)和两个工作节点(foo-2 和 foo-3)。我们有一个在 foo-3 上运行的 pod(由 Kubernetes 决定)。我们故意关闭 foo-3 作为实验。

我的期望是 Kubernetes 会“看到”关闭,并在 foo-2 中自动重启 pod。但是,这似乎并没有发生。事实上,它似乎认为 pod 仍在 foo-3 上运行。

等待了五分钟后,Kubernetes 终于意识到集群节点已经消失了,并通过在 foo-2 上重启 pod 来优雅地响应。五分钟对我们来说太长了,因为这不是一个复制的应用程序。我们如何使超时时间大大缩短(例如,10 秒)?实际上,如果主机正常关闭(例如修补),效果应该是立竿见影的。

Nic*_*lay 6

kube-controller-manager 中有一个--pod-eviction-timeout参数,默认为 5m:

 --pod-eviction-timeout duration    The grace period for deleting pods on failed nodes. (default 5m0s)
Run Code Online (Sandbox Code Playgroud)

如果您想加快驱逐过程,则需要对其进行修改。

但是如果你想最小化你的 pod 的停机时间,当节点宕机时,你还需要修改以下参数:

kubelet: node-status-update-frequency=4s (default 10s)

kube-controller-manager: node-monitor-period=2s (default 5s)
kube-controller-manager: node-monitor-grace-period=16s (default 40s)
kube-controller-manager: pod-eviction-timeout=30s (default 5m)
Run Code Online (Sandbox Code Playgroud)

而且,当然,您始终可以使用副本 2 进行部署,即使一个节点出现故障,服务也会正常运行。