‘Kubelet 停止发布节点状态’且节点不可访问

问题描述 投票:0回答:4

我在一个相当新的集群上遇到了一些问题,其中几个节点(似乎总是成对发生,但可能只是巧合)将变为 NotReady,并且

kubectl describe
会说 Kubelet 停止发布内存、磁盘的节点状态,PID并准备好。

所有正在运行的 pod 都陷入了终止状态(可以使用 k9s 连接到集群并看到这一点),我找到的唯一解决方案是封锁并排空节点。几个小时后,它们似乎被删除并创建了新的。或者,我可以使用 kubectl 删除它们。

它们完全无法通过 ssh 访问(超时),但 AWS 报告 EC2 实例没有问题。

这种情况在过去一周已经发生了三次。一切都恢复得很好,但显然存在一些问题,我想弄清楚它的真相。

如果我根本无法进入箱子,我该如何了解发生了什么? (实际上我只是想到也许可以拍摄该卷的快照并安装它,因此如果再次发生这种情况我会尝试,但欢迎任何其他建议)

运行 kubernetes v1.18.8

amazon-web-services kubernetes
4个回答
4
投票

我遇到了同样的问题,20-30 分钟后,我的节点进入

NotRready
状态,并且链接到这些节点的所有 pod 都陷入
Terminating
状态。
我尝试通过 SSH 连接到我的节点,有时我面临超时,有时我(几乎)无法连接,然后我执行了
top
命令来检查正在运行的进程。
最消耗的进程是
kswapd0

我的实例内存和 CPU 都已满(!),因为它尝试进行大量交换(由于内存不足),导致
kswapd0
进程消耗超过 50% 的 CPU!

根本原因
某些 Pod 消耗了 400% 的内存请求(定义于Kubernetes 部署),因为它们最初配置不足。因此,当我的节点启动时,Kubernetes 将它们放置在每个 pod 仅有 32Mb 内存请求(我定义的值)的节点上,但这还不够。

解决方案
解决方案是增加容器请求:

requests:
  memory: "32Mi"
    cpu: "20m"
    limits:
       memory: "256Mi"
       cpu: "100m"

使用这些值(就我而言):

requests:
  memory: "256Mi"
    cpu: "20m"
    limits:
       memory: "512Mi"
       cpu: "200m"

重要
之后,我对节点进行了滚动更新(cordon > drain > delete),以确保 Kubernetes 为我新启动的 pod 直接保留足够的内存。

结论
定期检查 Pod 的内存消耗,并随着时间的推移调整您的资源请求。
目标是永远不要让您的节点因内存饱和而感到惊讶,因为交换对于您的节点来说可能是致命的。


3
投票

这里有两种最常见的可能性,都很可能是由大负载引起的:

    kubelet 主机上出现
  • Out of Memory
    错误。可以通过在
    --kubelet-extra-args
    上添加适当的
    BootstrapArguments
    来解决。例如:
    --kubelet-extra-args "--kube-reserved memory=0.3Gi,ephemeral-storage=1Gi --system-reserved memory=0.2Gi,ephemeral-storage=1Gi --eviction-hard memory.available<200Mi,nodefs.available<10%" 

  • 问题解释这里

kubelet 有时无法修补其节点状态,因为超过 250 个 资源保留在节点上,kubelet 无法观看超过 250 个流 同时使用 kube-apiserver。所以,我只是调整 kube-apiserver --http2-max-streams-per-connection 到 1000 以减轻痛苦。

您可以调整上面提供的值,或者尝试找到高负载/IOPS 的原因并尝试将其调低。


0
投票

答案是 iops 问题,因为 du 命令来自(我认为)cadvisor。我已经转移到 io1 盒子,并且从那时起就保持了稳定性,因此将其标记为已关闭,并将 ec2 实例类型的移动作为解决方案

感谢您的帮助!


0
投票

就我而言,OKE 集群中的节点资源存在问题。 2 个 cpu 和 2 GB 内存不够,因此在创建节点并加入集群几分钟后 kubelet 停止响应。我换成4个cpu和4GB内存

© www.soinside.com 2019 - 2024. All rights reserved.