栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
  • 一、问题背景
  • 二、问题分析
    • 2.1、查看问题pod日志信息
    • 2.2、查看节点磁盘容量信息
    • 2.3、查看系统日志信息
  • 三、解决方案
    • 3.1、方案一
    • 3.2、方案二
  • 总结:整理不易,如果对你有帮助,可否点赞关注一下?


一、问题背景

当前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的镜像被删除,如下图所示:


三、解决方案 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集群运维实战

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/312543.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号