kubernetes - 节点状态在高资源需求 pod 上变为未知

标签 kubernetes jenkins-plugins aws-ebs

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

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

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

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

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

PS:我用的是EBS(gp2)

最佳答案

根据 docs ,对于要“准备就绪”的节点:

True if the node is healthy and ready to accept pods, False if the node is not healthy and is not accepting pods, and Unknown if the node controller has not heard from the node in the last node-monitor-grace-period (default is 40 seconds)

当您运行工作负载时,您的 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-period您的 kube-controller-manager 中的选项。您可以将其添加到 /etc/kubernetes/manifests/kube-controller-manager.yaml 中的命令行中并重新启动 kube-controller-manager容器。

  • 当节点处于“未知”状态时,你能ssh吗?进去看看你能不能到达kubeapi-server ?都在 <master-ip>:6443还有kubernetes.default.svc.cluster.local:443端点。

关于kubernetes - 节点状态在高资源需求 pod 上变为未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53263868/

相关文章:

jenkins - 使用rest api从jenkins获取构建信息

jenkins - 如何在数据库中捕获项目的 Junit 测试结果

node.js - 我必须包括 :433 to access HTTPS on AWS Elastic Beanstalk

kubernetes - 在 kubernetes 中使用 CrashLoopBackOff 状态重新部署 statefulset

kubernetes - 使用大使api网关作为Istio入口?

kubernetes - 网址上的连接超时异常-http://localhost:8888&找不到PropertySource:GET请求上的I/O错误

jenkins - Jenkins 管道中给定阶段超时后继续执行后续阶段

reactjs - 当路径不是 "/"时,react-router + nginx 入口刷新会导致白屏

linux - 如果/dev/xvda 到/dev/xvdz 正在使用,如何向 Linux 添加另一个卷?

aws-cloudformation - 创建卷 DeleteOnTermination=true 的实例失败