怎么排查Kubernetes故障

发布时间:2021-11-05 17:01:51 作者:iii
来源:亿速云 阅读:96

这篇文章主要介绍“怎么排查Kubernetes故障”,在日常操作中,相信很多人在怎么排查Kubernetes故障问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么排查Kubernetes故障”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

关键点

排查Kubernetes部署故障的3个步骤:

直观图示

首先,检查Pod已经创建,并且正常。

怎么排查Kubernetes故障

其次,如果Pod正常,则应检查服务是否可以将流量分配给Pod。

怎么排查Kubernetes故障

最后,检查服务与入口之间的连接。

怎么排查Kubernetes故障

Pod故障排查

在大多数情况下,问题出在Pod本身。应该确保Pod正在运行并准备就绪(READY为1)。

检查方法:

kubectl get pods

怎么排查Kubernetes故障

如上述会话,最后一个Pod处于"Running"和"就绪"状态,前两个Pod都没有处于Running状,状态也未"就绪"。

关键点

可以用下面几个命令用来排查Pod故障:

常见Pod错误列表

Pod可能会出现各种启动和运行时错误。

启动错误:

ImagePullBackoff,ImageInspectError,ErrImagePull,ErrImageNeverPull,RegistryUnavailable,InvalidImageName

运行时错误:

CrashLoopBackOff,RunContainerError,KillContainerError,VerifyNonRootError,RunInitContainerError,CreatePodSandboxError,ConfigPodSandboxError,KillPodSandboxError,SetupNetworkError,TeardownNetworkError

关键错误代码及其修复方法

ImagePullBackOff

当Kubernetes无法检索Pod容器之一的图像时,将出现此错误。

主要三个原因:

解决方法:

前两种情况可以通过修改镜像名和标签来解决。

第三个问题,需要在注册表中添加凭据,并在Pod中引用。

官方文档中有一个有关如何实现此目标的示例。

CrashLoopBackOff

如果容器无法启动,则Kubernetes status会显示CrashLoopBackOff错误。

通常,Pod在以下情况下容器无法启动:

解决方法:

应该查看容器中日志,了解详细失败的原因。

kubectl logs--previous

RunContainerError

当容器无法启动时出现错误,直至在容器内的应用程序启动之前。

该问题通常是由于配置错误,例如:

挂载不存在的卷,例如ConfigMap或Secrets

将只读卷安装为可读写

解决方法:

对该错误应该使用kubectl describe pod来收集和分析错误。

Pod处于待处理状态

当创建Pod时,该Pod保持在待处理状态。主要可能原因:

解决方法:

检查kubectl describe命令的事件部分:

kubectl describe pod

对于因ResourceQuotas而导致的错误,可以使用以下方法检查群集的日志:

kubectl get events --sort-by=.metadata.creationTimestamp

Pod处于未就绪状态

如果Pod正在运行但未就绪,则表示"就绪"探针失败。

当就绪探针失败时,Pod未连接到服务,并且不会有流量转发到该实例。

解决方法

准备就绪探针失败是特定于应用程序的错误,因此应该检查kubectl描述中的"事件"部分以识别错误。

服务故障排查

如果的Pod正在运行且已就绪,但仍无法收到应用程序的响应,则应检查服务的配置是否正确。

关键点

服务的主要功能是根据流量的标签将流量路由到Pod。所以,先应该检查服务定位了多少个Pod,可以通过检查服务中的端点来查看:

kubectl describe service| grep Endpoints

端点是一对,并且在服务(至少)以Pod为目标时,应该至少有一个。

如果"端点"部分为空,则有两种原因:

没有运行带有正确标签的Pod,应检查是否在正确的命名空间。

服务的选择器标签中有错字;

如果可以看到端点列表,但仍然无法访问应用程序,则很大原因是服务中的targetPort配置有误。

可以通过使用kubectl port-forward连接到服务具体排查:

kubectl port-forward service/3000:80

入口故障排查

如果Pod运行正常,服务可以分配流量到Pod,则可能原因是入口配置有误:

根据入口可能使用不同控制器类型,需要按具体对应方法进行调试。

关键点

检查入口配置参数serviceName和servicePort配置是否正确。可以使用下面命令检查:

kubectl describe ingress

如果"后端"列为空,则配置中肯定有一个错误。

如果可以在"后端"列中看到端口,但是仍然无法访问该应用程序,则可能是以下问题:

没有如何将入口发布到公网;没有如何将群集发布到公网;

可以通过直接连接到Ingress Pod来将基础结构问题与入口隔离开。

首先,查看入口控制器Pod列表:

kubectl get pods --all-namespaces

怎么排查Kubernetes故障

其次,使用kubectl describe命令查看端口:

kubectl describe pod nginx-ingress-controller-6fc5bcc

怎么排查Kubernetes故障

最后,连接到Pod:

kubectl port-forward nginx-ingress-controller-6fc5bcc 3000:80 --namespace  kube-system

这样,访问计算机上的端口3000时,请求都会转发到Pod上的端口80。现在应用可以用吗?

如果可行,则问题出在基础架构中。应该检查如何将流量调度到群集。

如果还不行,则问题出在入口控制器中。应该调试入口控制器。常见的入口控制包括Nginx,HAProxy,Traefik等,可以查看具体控制器相关文档进行问题排查。此处我们以Nginx为例:

排查Nginx控制器

Ingress-nginx项目是Kubectl官方插件。可以使用kubectl ingress-nginx执行以下操作:

对应的命令有:

到此,关于“怎么排查Kubernetes故障”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. 如何使用strace工具排查故障?
  2. xshell连接故障排查

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kubernetes

上一篇:web技术栈中的池有哪些

下一篇:rdp远程桌面的连接方式是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》