《Kubernetes故障篇:Kubernetes Node节点DiskPressure异常处理》



一、问题背景

当前kubernetes环境为单节点kubernetes,master节点或worker节点为同一主机,查询该节点上所有业务系统pod发现都处于pending状态,无法正常工作。且kube-flannel-ds-amd64-864q5这个pod处于Evicted(驱逐)状态。

如下图所示:
在这里插入图片描述


二、问题分析

2.1、查看问题pod日志信息

kubectl describe pods kube-flannel-ds-amd64-864q5 -n kube-system

如下图所示:
在这里插入图片描述
说明:根据pod日志报错信息表示改节点资源不足,disk是磁盘的意思。


2.2、查看节点磁盘容量信息

说明:上述日志信息表示磁盘容量不足,df -h查看当前节点磁盘容量使用信息。如下图所示:
在这里插入图片描述
当前磁盘使用率为88%,并没有达到100%,是不是很奇怪为什么k8s会报错提示磁盘资源不足呢?请继续往下看!


2.3、查看系统日志信息

说明:查看系统日志信息,捕捉与disk有关的关键信息。

grep -i  disk  /var/log/messages | head -10

如下图所示:
在这里插入图片描述
说明:上述途中红色标记部分大概的意思是:镜像文件系统的磁盘占用率为88%,超过了高阈值(85%)。 尝试将80476641689字节释放到低阈值(80%)。也就是说node节点低于15%的时候,该节点上讲会执行eviction(驱逐)操作,由于磁盘已经达到了88%,在怎么驱逐也无法正常启动就会一直重启,Pod状态也是pending中。同时你会发现被驱逐pod的镜像也会在磁盘资源不足时删除

使用如下命令可发现,fannel的镜像被删除

docker images | grep flannel

三、解决方案

3.1、方案一

1、清理磁盘空间,将磁盘使用率降到80%以下
2、重启kubelet服务

systemctl daemon-reload
systemctl restart kubelet

3、由于之前flannel镜像被删除,需要重新导入镜像

docker load -i flannel-v0.12.0-amd64.tar.gz
kubectl apply -f kube-flannel.yml

4、查看所有pod状态,如下所示则表示正常
在这里插入图片描述


3.2、方案二

1、修改配置文件前查看系统日志
在这里插入图片描述
2、修改配置文件增加传参数,添加此配置项–eviction-hard=nodefs.available<5%

#1、备份原先配置文件
cp /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf.bak

#2、修改配置文件,在Environment中增加--eviction-hard=nodefs.available<5%
vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --eviction-hard=nodefs.available<5%"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

#3、重启kubelet服务
systemctl daemon-reload
systemctl restart kubelet

3、修改配置文件后查看系统日志
在这里插入图片描述
说明:最新日志,已经是0.05 也就是剩余5%,才会出现驱逐的情况。

4、清理磁盘空间,降低磁盘空间使用率

5、kubelet 将驱逐信号映射到节点条件
在这里插入图片描述


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值