记一次 Kubernetes 排错实战

云计算
数据的不一致性(inconsistent)指对象的大小不正确、恢复结束后某副本出现了对象丢失的情况。数据的不一致性会导致清理失败(scrub error)。

[[434523]]

背景

收到测试环境集群告警,登陆Kubernetes集群进行排查。

故障定位

查看Pod

查看kube-system node2节点calico pod异常。

查看详细信息,查看node2节点没有存储空间,cgroup泄露。

查看存储

登陆node2查看服务器存储信息,目前空间还很充足。

集群使用到的分布式存储为Ceph,因此查看Ceph集群状态。

操作

Ceph修复

目前查看到Ceph集群异常,可能导致node2节点cgroup泄露异常,进行手动修复Ceph集群。

数据的不一致性(inconsistent)指对象的大小不正确、恢复结束后某副本出现了对象丢失的情况。数据的不一致性会导致清理失败(scrub error)。

Ceph在存储的过程中,由于特殊原因,可能遇到对象信息大小和物理磁盘上实际大小数据不一致的情况,这也会导致清理失败。

数据的不一致性(inconsistent)指对象的大小不正确、恢复结束后某副本出现了对象丢失的情况。数据的不一致性会导致清理失败(scrub error)。

Ceph在存储的过程中,由于特殊原因,可能遇到对象信息大小和物理磁盘上实际大小数据不一致的情况,这也会导致清理失败。

由图可知,pg编号1.7c 存在问题,进行修复。

pg修复:

  1. ceph pg repair 1.7c 

进行修复后,稍等一会,再次进行查看,Ceph集群已经修复。

进行Pod修复

对异常Pod进行删除,由于有控制器,会重新拉起最新的Pod。

查看Pod还是和之前一样,分析可能由于Ceph异常,导致node2节点cgroup泄露,网上检索重新编译。

Google一番后发现与https://github.com/rootsongjc/kubernetes-handbook/issues/313这个同学的问题基本一致。存在的可能有:

  • Kubelet宿主机的Linux内核过低 - Linux version 3.10.0-862.el7.x86_64
  • 可以通过禁用kmem解决

查看系统内核却是低版本。

故障再次定位

最后,因为在启动容器的时候runc的逻辑会默认打开容器的kmem accounting,导致3.10内核可能的泄漏问题。

在此需要对no space left的服务器进行reboot重启,即可解决问题,出现问题的可能为段时间内删除大量的Pod所致。

初步思路,可以在今后的集群管理汇总,对服务器进行维修,通过删除节点,并对节点进行reboot处理。

对node2节点进行维护

标记node2为不可调度

  1. kubectl cordon node02 

驱逐node2节点上的Pod

  1. kubectl drain node02 --delete-local-data --ignore-daemonsets --force 
  • --delete-local-data 删除本地数据,即使emptyDir也将删除;
  • --ignore-daemonsets 忽略DeamonSet,否则DeamonSet被删除后,仍会自动重建;
  • --force 不加force参数只会删除该Node节点上的ReplicationController,ReplicaSet,DaemonSet,StatefulSet or Job,加上后所有Pod都将删除。

目前查看基本node2的Pod均已剔除完毕。

此时与默认迁移不同的是,Pod会先重建再终止,此时的服务中断时间=重建时间+服务启动时间+readiness探针检测正常时间,必须等到1/1 Running服务才会正常。因此在单副本时迁移时,服务终端是不可避免的。

对node02进行重启

重启后node02已经修复完成。

对node02进行恢复:

恢复node02可以正常调度。

  1. kubectl uncordon node02 

反思

后期可以对部署Kubernetes集群内核进行升级。

集群内可能Pod的异常,由于底层存储或者其他原因导致,需要具体定位到问题进行针对性修复。 

原文链接:https://juejin.cn/post/6969571897659015205

 

责任编辑:武晓燕 来源: 幽鬼
相关推荐

2021-11-27 18:50:55

Kubernetes边缘计算

2021-03-29 12:35:04

Kubernetes环境TCP

2021-05-26 11:06:06

Kubernetes网络故障集群节点

2021-08-20 11:35:04

服务运维 故障

2021-02-25 10:00:19

企业安全互联网云平台安全

2022-02-17 11:19:33

Kubernetes服务器运维

2022-01-07 11:48:59

RabbitMQGolang 项目

2014-08-11 09:31:52

2017-07-07 16:07:41

2023-04-06 07:53:56

Redis连接问题K8s

2013-04-01 10:27:37

程序员失业

2019-08-26 09:50:09

2011-02-22 09:29:23

jQueryJavaScript

2017-12-19 14:00:16

数据库MySQL死锁排查

2019-03-15 16:20:45

MySQL死锁排查命令

2021-12-20 10:15:16

zip密码命令网络安全

2023-06-07 07:31:04

PC端app脱壳技巧

2020-12-29 10:25:07

漏洞JSONP注入

2018-07-11 10:24:33

数据恢复数据删除

2013-01-17 10:31:13

JavaScriptWeb开发firebug
点赞
收藏

51CTO技术栈公众号