记一次K8s排错实战
- - 掘金 后端这是我参与更文挑战的第3天,活动详情查看:. 收到测试环境集群告警,登陆K8s集群进行排查. 查看kube-system node2节点calico pod异常. 查看详细信息,查看node2节点没有存储空间,cgroup泄露. 登陆node2查看服务器存储信息,目前空间还很充足. 集群使用到的分布式存储为ceph,因此查看ceph集群状态.
这是我参与更文挑战的第3天,活动详情查看: 更文挑战
收到测试环境集群告警,登陆K8s集群进行排查。
查看kube-system node2节点calico pod异常
目前查看到ceph集群异常,可能导致node2节点cgroup泄露异常,进行手动修复ceph集群。
数据的不一致性(inconsistent)指对象的大小不正确、恢复结束后某副本出现了对象丢失的情况。数据的不一致性会导致清理失败(scrub error)。
CEPH在存储的过程中,由于特殊原因,可能遇到对象信息大小和物理磁盘上实际大小数据不一致的情况,这也会导致清理失败。
复制代码
由图可知,pg编号1.7c 存在问题,进行修复。
ceph pg repair 1.7c
复制代码
对异常pod进行删除,由于有控制器,会重新拉起最新的pod
查看pod还是和之前一样,分析可能由于ceph异常,导致node2节点cgroup泄露,网上检索重新编译
查看系统内核却是低版本
最后,因为在启动容器的时候runc的逻辑会默认打开容器的kmem accounting,导致3.10内核可能的泄漏问题
在此需要对no space left的服务器进行 reboot重启,即可解决问题,出现问题的可能为段时间内删除大量的pod所致。
初步思路,可以在今后的集群管理汇总,对服务器进行维修,通过删除节点,并对节点进行reboot处理
kubectl cordon node02
复制代码
kubectl drain node02 --delete-local-data --ignore-daemonsets --force
复制代码
目前查看基本node2的pod均已剔除完毕
此时与默认迁移不同的是,pod会 先重建再终止
,此时的 服务中断时间=重建时间+服务启动时间+readiness探针检测正常时间,必须等到 1/1 Running
服务才会正常。 因此在单副本时迁移时,服务终端是不可避免的。
重启后node02已经修复完成。
对node02进行恢复
kubectl uncordon node02
复制代码