当一个节点关闭时,如何减少在另一个节点上移动容器的时间

时间:2019-02-04 08:50:17

标签: kubernetes google-kubernetes-engine

我有一个问题,我找不到如何更改pod check参数以在另一个节点上移动。当k8s检测到某个节点发生故障时。

我找到了参数--sync-synchrionizes,但不确定。

有人知道该怎么做吗?

3 个答案:

答案 0 :(得分:2)

您需要更改kube-controller-manager.conf并更新以下参数:(您可以在/etc/kubernetes/manifests中找到文件)

node-status-update-frequency: 10s
node-monitor-period: 5s
node-monitor-grace-period: 40s
pod-eviction-timeout: 30s

当节点死亡或进入离线模式时,会发生以下情况:

  1. kubelet通过--node-status-update-fequency=10s将其状态发布给母版。
  2. 节点离线
  3. kube-controller-manager正在通过--node-monitor-period=5s
  4. 监视所有节点
  5. kube-controller-manager将看到节点无响应,并具有宽限期--node-monitor-grace-period=40s,直到它认为节点不正常为止。 PS:此参数应为N x node-status-update-fequency
  6. 一旦节点标记为不正常,kube-controller-manager将基于--pod-eviction-timeout=5m移除吊舱

现在,如果将参数pod-eviction-timeout调整为30秒,则从节点逐出pod仍将花费总共70秒。node-status-update-fequency和node-monitor-grace-period时间也计入node-monitor-grace-period。您还可以调整这些变量,以进一步降低总节点驱逐时间。

答案 1 :(得分:0)

将Pod安排到特定节点后,无论如何都不会将其移动或转移到任何其他节点。在可用节点上创建了新Pod。

如果没有部署或RC,则要管理应用程序的状态(窗格数),它将永远丢失。但是,如果您使用的是负责维护所需状态的deploy或其他对象,则如果节点发生故障,它将检测到当前状态的变化,然后为另一个节点创建新的pod(取决于节点的容量)。

答案 2 :(得分:0)

绝对同意以上观点。将Pod从发生故障的节点上逐出并在5秒内将其移动到另一个可用节点上是非常具有挑战性的。几乎不可能。您需要监视节点状态,允许宽限期以确认该节点确实处于关闭状态,然后将状态标记为不正常。最后将吊舱移至其他活动节点。 您可以将那些节点监视器参数调整为更少的值,但是缺点是,随着Kubelet与api服务器之间建立更多的连接,控制面板的性能将受到影响。 建议您为每个Pod运行2个副本,以便您的应用仍可用于满足用户请求