在iManager for K8S产品中,如果创建了云套件站点,会有三个consul的服务,consul在云套件中充当的角色是服务发现,服务注册,以及配置共享。如果consul服务失效,云套件的整体服务将不能正常运行。客户在使用云套件产品过程中,如果出现非正常重启K8S或者云套件服务,可能会导致consul不能正常启动。今天我们也以一个实际的例子来给大家讲解下如何解决这类问题。
问题现象:云套件无法访问,查看k8s dashboard ui界面(如果安装的是我们提供的离线安装包的话,可以访问31234端口),找到云套件icloud-native-*命名空间,容器组中consul异常,一直在重启,时而正常时而重启,循环往复。
步骤一,查看consul日志
报错为找不到consul的节点。一般consul异常的原因为nfs文件locked,导致consul无法正常启动,可以重启nfs解决,此方式能解决90%的consul异常问题。
systemctl restart nfs
如果重启nfs依然无法解决问题,依然报选主错误,那就是consul集群重启后找不到之前的节点ip导致选主失败
步骤二
找到consul的挂载pvc目录,在容器组中找到consul-server-0,选择查看详细信息,查看pvc挂载
这个路径就是nfs中的实际路径,在nfs服务器上,找到这个目录
步骤三
在consul-server-0的挂载目录创建peer.json文件。通过上一步找到consul-server-0的挂载目录后,可以在目录中找到一个peers.info文件,里面有peers.json的说明。
我们以说明中的第二种方式,在同级目录中创建一个peers.json文件。内容以peers.info的第二种方式为模板。
address为consul的三个pod的ip,可以在pod详细页面查看到,分别填入三个consul的address
id可以在三个consul-server-*的pvc下,node-id文件中,找到后分别填入
步骤四
将peer.json填写好后保存,从consul-server-0开始,通过pod页面的命令行运行,执行
consul leave
执行后等容器自动重启,然后在consul-server-1,consul-server-2依次执行
切记:一定要在consul-server-*的pod命令行中执行该命令重启,如果通过删除pod的方式重启会导致容器的IP再次改变而consul集群会继续找不到对应的节点ip
依次执行consul leave命令待容器重启后,consul集群将恢复正常,云套件也会正常启动。
该问题的参考资料可以查看consul的官方文档说明
以上就是云套件中consul启动异常的解决方法,如果您按照文档操作还是没有解决问题,可以在文章下方给我们留言或者是通过4008900866联系我们的iManager产品支持工程协助您解决。