我有一个涉及kubernetes插件的Jenkins部署管道。使用kubernetes插件,我创建了一个从属pod,用于使用 yarn 构建节点应用程序。设置了对CPU和内存的请求和限制。
当Jenkins主服务器调度从服务器时,有时(到目前为止,我还没有看到任何模式),该Pod会使整个节点无法访问,并将节点的状态更改为“未知”。在Grafana中仔细检查后,CPU和内存资源似乎在该范围内,并且没有可见的峰值。唯一出现的峰值是磁盘I / O,峰值约为4 MiB。
我不确定这是否是节点无法将自身作为群集成员寻址的原因。在这里我需要一些帮助:
a)如何深入诊断节点离开群集的原因。
b)如果原因是磁盘IOPS,是否存在任何默认请求,以及Kubernetes级别的IOPS限制?
PS:我正在使用EBS(gp2)
答案 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节点以检查该节点现在是否在工作