3

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

当 Jenkins master 调度 slave 时,有时(因为我还没有看到模式,到目前为止),pod 使整个节点无法访问并将节点的状态更改为未知。在 Grafana 中仔细检查后,CPU 和内存资源似乎在范围内,没有明显的峰值。发生的唯一峰值是磁盘 I/O,峰值达到 ~ 4 MiB。

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

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

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

PS:我正在使用 EBS (gp2)

4

2 回答 2

2

考虑到该节点之前正在工作并且最近停止显示就绪状态,请重新启动您的 kubelet 服务。只需 ssh 进入受影响的节点并执行:

/etc/init.d/kubelet restart

回到你的主节点运行 kubectl get nodes 检查节点是否正在工作

于 2019-05-15T09:56:02.967 回答
2

根据文档,节点“就绪”:

如果节点健康并准备好接受 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>
    
  • 增加--node-monitor-grace-periodkube-controller-manager 中的选项。您可以将其添加到命令行中/etc/kubernetes/manifests/kube-controller-manager.yaml并重新启动kube-controller-manager容器。

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

于 2018-11-12T23:26:08.603 回答