有些客户在使用iManager for K8S 云套件的产品的时候,偶尔会遇到机器异常重启的情况,比如说服务器断电,重启后可能会出现云套件启动异常的情况,比如说keycloak启动不了,一直抛出异常导致服务无法正常使用。本篇文章就结合实际案例来给大家详解如何处理这种情况。
问题现象:iManager能够正常登录访问,但是站点中的云套件无法正常访问,查看容器组发现keycloak一直在抛错无法正常启动。排错步骤如下:
步骤一
如果有k8s dashboard ui界面的客户可以通过ui界面进行排查,如果没有就可以通过命令来进行操作
//查看icloud-native-4命名空间下所有pods的状态,这里的“4”要根据实际的id值来替换,后续内容涉及到此值都要根据实际的值进行替换
kubectl get pods -n icloud-native-4 -o wide
//正常的pod状态为running,运行数/副本数为相同的则状态正常,如果是0/1或者1/2这种就是不正常的
在本案例中输出结果为keycloak容器组异常,状态为0/1
步骤二
尝试恢复容器状态
//方法一,直接删除异常pod,pod会自动重建
kubectl delete pod keycloak -n icloud-native-4
//方法二,伸缩异常pod的副本数
kubectl scale sts keycloak --replicas=0 -n icloud-native-4
//待状态变为0/0后伸缩为1
kubectl scale sts keycloak --replicas=1 -n icloud-native-4
如果两种方法都不管用,keycloak状态依然为0/1,那么就应该查看日志以辅助解决
kubectl logs keycloak -n icloud-native-4
从日志中能看出keycloak在操作数据库的时候报错数据库被锁(Lock owned during cleanup),keycloak连接的数据为keycloak-postgresql,尝试重启keycloak-postgresql
//重启keycloak-postgresql
kubectl delete pod keycloak-postgresql -n icloud-native-4
重启后可能还是一样的报错,继续下一步
步骤三
清空keycloak-postgresql挂载,重启keycloak-postgresql
- 找到keycloak-postgresql的实际挂载目录
//查询命名空间下的pvc 找到kc-pg的pv,输出keycloak-postgresql的pvc名称
kubectl get pvc -n icloud-native-4|grep keycloak-postgresql
//使用keycloak-postgresql的pvc名称查看实际目录
kubectl describe pv pvc-92266626-5aac-4899-9a54-a90d777bc84b
- 找到keycloak-postgresql的挂载目录后,将目录里的内容备份,将keycloak-postgresql伸缩为0,可以在UI界面【部署】找到keycloak-postgresql,设置伸缩0,也可以使用命令
kubectl scale deployment keycloak-postgresql --replicas=0 -n icloud-native-4
- 清空keycloak-postgresql的挂载目录,伸缩为1
kubectl scale deployment keycloak-postgresql --replicas=1 -n icloud-native-4
- 清空keycloak-postgresql的挂载目录会导致云套件的用户,角色,服务实例授权被清空,所以后续需要重新设置新增的用户,角色,重新对服务实例进行授权。
操作完以上步骤后,待keycloak-postgresql,keycloak启动,状态恢复正常,pods列表显示iserver-gateway和iserver-servicelist无法正常启动。以上就是该案例的解决步骤,如果按照这些步骤还没有正常恢复的话,可以在文章下方给我们留言也可以拨打4008900866联系我们的iManager支持人员协助解决。