又一次偷偷化解了可能发生的重大事故。不想看过程的可以直接跳到末尾看处理方案。
一个网络错误
某天,上 kplcloud 构建一个测试应用,构建完成之后发现新 pod 一直启动失败,并且抛出了以下错误信息:
会 k8s 的运维同学不在,突然出问题了怎么办?
试着开始解决问题。
一、有没有可能是镜像拉取失败,开始找问题:
登录集群所有服务器查看空间是否占满(然而并没有占满)
查询集群所有服务器网络情况(也没有问题)
再启一个 pod 试试?(起不来)
这就尴尬了…,有没有可能是 calico 的问题?
二、查看服务器报错信息
尝试以下命令看服务器的报错信息:
确实有一些错误信息:
这个错误太广泛了,继续尝试从其他地方找找问题。
此时已经开始在思考如何跑路的问题了…
要不尝试重启能否解决?
风险太大,不能冒险。虽然很多时候重启能解决大部分问题,但重起 docker、k8s 在这种情况下不是最佳选择。
继续搜刮日志,猜测是无法分配 IP 的问题,那目标转向 calico
从 calico-node 上面找问题
查询 ip 池是否用完。
使用 calicoamd 命令查询 calico 是否正常正常运行
似乎是没啥问题。
开始场外求助…
无果
既然 calico-node 都运行正常,应该不会是 calico-etcd 的问题吧。
试试 calico-etcd
本着有疑问就查证试试的态度,下面开始对 calico-etcd 进行一顿骚操作。
为了减少代码量方便阅读,以下 etcdctl 所需要加的证书及 endpoints,就不一一添加了,大家参考一下就好:
calico 并没有问题,试试 calico 所使用的 ETCD 是否正常,进入 calico-etcd 集群:
似乎集群也运行正常,get 数据也正常。
一切看起来都感觉是多么的正常,似乎没有什么毛病。
算了,算了,还是先写会儿简历吧,换换脑子。
那尝试向 ETCD 写入一条数据试试?
✨报了一个错:
Error: etcdserver: mvcc: database space exceeded ???
似乎是找到原因了,既然定位到问题所在,那接下来就好办了。(不用跑路了(⁎⁍̴̛ᴗ⁍̴̛⁎))把简历先放一放。
感谢 google,我从 etcd 官网找到了一些线索及解决方案,后面我贴上官网介绍,先解决问题:
使用 etcdctl endpoint status 查询 etcd 各个节点的使用状态:
上面可以看到集群空间已经使用了 2.1GB 了,这个值需要留意一下。
查询 etcd 是否有告警信息使用命令 etcdctl alarm list:
显示了一个 alerm:NOSPACE,这个表示没空间了,那是没什么空间呢?磁盘还是内存?先查询一下。
似乎磁盘、内存空间都足够的。从官网的信息了解到应该是 etcd 配额的问题,Etcd v3 的默认的 backend quota 2GB,也就是说 etcd 默认最大的配额是 2GB,如果超过了则无法再写入数据,要么把旧数据删除,要么把数据压缩了。
参考官方的解决方案
ETCD 官网参考:https://etcd.io/docs/v3.2.17/op-guide/maintenance/
获取 etcd 的旧版本号
压缩旧版本
整理碎片
关闭告警
测试数据是否可写入
回到 k8s 这边,删除那个失败的 pod,并查看是否可正常分配 ip。
一切正确,完美。
为了避免后续再出现类似问题,需要设置自动压缩,启动自动压缩功能需要在 etcd 启动参考上加上 xxxxx=1
https://skyao.gitbooks.io/learning-etcd3/content/documentation/op-guide/maintenance.html
etcd 默认不会自动 compact,需要设置启动参数,或者通过命令进行 compact,如果变更频繁建议设置,否则会导致空间和内存的浪费以及错误。Etcd v3 的默认的 backend quota 2GB,如果不 compact,boltdb 文件大小超过这个限制后,就会报错:”Error: etcdserver: mvcc: database space exceeded”,导致数据无法写入。
产生这么多垃圾数据的原因就是因为频繁的调度,我们集群有大量 CronJob 在执行,并且执行的非常活跃,每次产生新的 Pod 都会被分配到 ip。有可能是因为 pod 时间太短或没有及时注销而导致 calico-etcd 产生了大量垃圾数据。
尾巴
因 calico-etcd 集群的的使用配额满了,在创建 pod 时 calico 所分配的 IP 无法写入到 etcd 里,从而导致 pod 创建失败也就无法注册到 CoreDNS 了。
为了不踩坑,监控是非常重要的,我们有 etcd 集群的监控,却忽略了 etcd 配额的监控,幸运的是当时并没有应用重启动或升级,没有造成损失。
最后的建议就是,没事上去点点,说不定会有您意想不到的惊喜(惊吓)。
本文转载自公众号宜信技术学院(ID:CE_TECH)。
原文链接:
评论