在高资源需求 pod 上,节点状态更改为未知

2024-03-06

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

当 Jenkins master 调度 Slave 时,有时(到目前为止我还没有看到任何模式),Pod 会使整个节点无法访问,并将节点状态更改为 Unknown。在 Grafana 中仔细检查后,CPU 和内存资源似乎完全在范围内,没有明显的峰值。唯一出现的峰值是磁盘 I/O,峰值约为 4 MiB。

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

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

b) 如果原因是磁盘 IOPS,那么 Kubernetes 级别是否有任何默认请求和 IOPS 限制?

PS:我使用的是EBS(gp2)


根据docs https://kubernetes.io/docs/concepts/architecture/nodes/#condition,使节点处于“就绪”状态:

如果节点健康并准备好接受 Pod,则为 True;如果节点不健康且不接受 Pod,则为 False;如果节点控制器在最后一个节点监控宽限期内没有收到来自节点的消息,则为 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>
    
  • 增加--node-monitor-grace-periodkube-controller-manager 中的选项。您可以将其添加到命令行中/etc/kubernetes/manifests/kube-controller-manager.yaml并重新启动kube-controller-manager容器。

  • 当节点处于“未知”状态时,您可以ssh进去看看你是否能到达kubeapi-server?两者都开启<master-ip>:6443还有kubernetes.default.svc.cluster.local:443端点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在高资源需求 pod 上,节点状态更改为未知 的相关文章

随机推荐