日常工作中 Pod 出现异常情况是常用的事情,一般是在系统项目中首次部署某个服务时经常会遇到。稳定运行之后Pod状态一般就不会出现问题。

Pod稳定运行一般之后,你不做任何运维变更操作的话,常有的一般是OOM异常。

基于以上的背景,我们今天聊聊“Pod出现异常了,如何排查和定位?”。让你进行项目首次部署时游刃有余。
在开始介绍前,推荐你阅读一篇文章,也是最近网上看到的《解读 K8s Pod 的13种典型异常》针对Pod的异常解读,大佬写的非常的详细。
文章链接:https://segmentfault.com/a/1190000043165703
文章中13种异常还是比较多的,不过不需要现在马上每个都去阅读理解。当我们遇到某个异常的时候再去看即可。
3个指令搞定Pod定位异常
Pod出现异常了,我们定位异常的方式也特别的简单。直接通过kubectl提供的子命令区分的故障排查命令即可排查定位 Pod 所有的故障问题,图中通过红色的框出来的就是我们接下来要介绍的故障排查命令。
-
kubectl describe:查看资源详细状态 + 异常原因。 -
kubectl logs:查看应用日志定位运行错误。 -
kubectl events:查看集群事件定位调度 / 运行异常。

1)kubectl describe 命令
这里重点介绍一下kubectl describe命令,因为它可以获得我们Pod的生命周期状态,包含异常状态。非常值得注意的是该命令还记录当前和上一次的状态,如果是异常状态还记录对应原因,通过这一点我们就非常的好判断Pod的异常了。

举个例子:
这里我 Nginx 服务的 Deployment 添加了一个存活探针,我故意检查的 81 端口来营造这个故障。该 Pod 经过一定时间的反复重启,就会出现这个问题

通过kubectl describe pod命令我们可以查看Pod的详情,首先查看 State 字段,可以看到当前原因为 CrashLoopBackOff(崩溃循环回退)

由于上述的 Reason 原因,我们无法判断是什么导致的,需要看describe具体的 Message 信息,这里可以看到是我们 Livenss 存活探针检查某个端口的问题。

2)kubectl events 命令
kubectl events是可以看到我们Pod的创建过程的,以及异常发生过程,同时记录异常信息。所以一般我们与**kubectl describe**结合使用。

3)kubectl logs 命令
kubectl logs 命令是用于定位业务服务本身的问题,不存在 Pod 资源的问题。这一点一定要是要搞清楚的。
比如,我们 Pod 的状态每次重启后是 Running 但是通过kubectl logs查看日志时业务是有报错信息的,这个时候就是业务本身的问题,不再是 Pod 资源的问题。
以上就是本次分享的内容,内容本身还是比较简单,稍微用过K8s的朋友应该都知道。但是对于初学者来说,这绝对是非常用有的内容。所以不要忘记三连支持一下哦~
END
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.qiuyl.com/cloudnative/532


Abutogel: <a href=" https://abutowin.icu/# ">S...