在高资源需求窗格上,节点状态变为未知

时间:2018-11-12 14:07:41

标签: kubernetes jenkins-plugins aws-ebs

我有一个涉及kubernetes插件的Jenkins部署管道。使用kubernetes插件,我创建了一个从属pod,用于使用 yarn 构建节点应用程序。设置了对CPU和内存的请求和限制。

当Jenkins主服务器调度从服务器时,有时(到目前为止,我还没有看到任何模式),该Pod会使整个节点无法访问,并将节点的状态更改为“未知”。在Grafana中仔细检查后,CPU和内存资源似乎在该范围内,并且没有可见的峰值。唯一出现的峰值是磁盘I / O,峰值约为4 MiB。

我不确定这是否是节点无法将自身作为群集成员寻址的原因。在这里我需要一些帮助:

a)如何深入诊断节点离开群集的原因。

b)如果原因是磁盘IOPS,是否存在任何默认请求,以及Kubernetes级别的IOPS限制?

PS:我正在使用EBS(gp2)

2 个答案:

答案 0 :(得分:1)

根据docs,将节点设置为“就绪”:

  

如果节点运行状况良好并准备好接受Pod,则为True;如果节点运行状况不佳并且不接受Pod,则为False;如果节点控制器未在最后一个node-monitor-grace-period中从节点听到消息,则为Unknown (默认为40秒)

似乎在运行工作负载时,您的kube-apiserver在40秒内没有收到来自节点(kubelet)的消息。可能有多种原因,您可以尝试以下方法:

  • 要查看节点中的“事件”,请运行:

    $ kubectl describe node <node-name>
    
  • 查看在kube-apiserver上是否发现异常。在主动主运行中:

    $ docker logs <container-id-of-kube-apiserver>
    
  • 查看当节点进入“未知”状态时,是否在kube-controller-manager上看到任何异常。在主动主运行中:

    $ docker logs <container-id-of-kube-controller-manager>
    
  • 增加kube-controller-manager中的--node-monitor-grace-period选项。您可以将其添加到/etc/kubernetes/manifests/kube-controller-manager.yaml的命令行中,然后重新启动kube-controller-manager容器。

  • 当节点处于“未知”状态时,您可以ssh进入它,看看是否可以到达kubeapi-server?既在<master-ip>:6443端点上,也在kubernetes.default.svc.cluster.local:443端点上。

答案 1 :(得分:0)

考虑到该节点先前处于工作状态并且最近停止显示就绪状态,请重新启动kubelet服务。只需SSH到受影响的节点并执行:

/etc/init.d/kubelet restart

回到主节点上,运行kubectl get节点以检查该节点现在是否在工作