有些客户在使用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
//查询命名空间下的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
kubectl scale deployment keycloak-postgresql --replicas=0 -n icloud-native-4
kubectl scale deployment keycloak-postgresql --replicas=1 -n icloud-native-4