Kubernetes Pods故障排除的简单技巧
  TEZNKK3IfmPf 2023年11月14日 19 0

轻松排除Kubernetes应用程序的故障并了解其机制在许多情况下,您可能会发现Kubernetes中的应用程序没有正确部署,或者没有正常工作。这篇文章提供了快速解决这种情况的故障排除技巧。

首先,你的Pod会失败有两个原因。 Kubernetes资源配置中的错误,如部署和服务。 代码中的问题。 在前一种情况下,容器不会启动。在后一种情况下,应用程序代码在容器启动后失败。 在本练习中,将使用kubectl命令行实用程序与K8S进行交互。

1.观测Pod

验证pod处于运行状态或就绪状态。

kubectl get pods

Kubernetes Pods故障排除的简单技巧

一个Pod处于待定状态九个小时,这可不好!容器没有启动,我们将使用技巧二中的describe命令对此进行研究。 同时,下面是容器启动失败时出现的其他错误代码。

  • ImagePullBackoff-Docker映像注册表不可访问,部署中指定的映像名称/版本不正确。确保图像名称是正确的,注册表是可访问的和经过身份验证的(docker登录…)。
  • RunContainerError-一个可能的原因:缺少配置映射/机密。
  • ContainerCreating——不能立即获得的东西,持久卷?

在我们调查其他错误之前,让我们尝试使用不正确的映像名称启动Pod。

# start Pod from image "ngin".
# 'web' can be any name, is the name of resulting K8S deployment
kubectl run temp --image=ngin --replicas=1

Kubernetes Pods故障排除的简单技巧

kubectl run temp --image=nginx --replicas=1
kubectl get pods

Kubernetes Pods故障排除的简单技巧

接下来,下面是容器启动后可能出现的一些错误。

  • CrashLoopBackOff-Pod活性检查失败或Docker映像有问题。E、g.,Docker命令正在立即退出。请参见技巧三来检查日志。注意:屏幕截图中的“重新启动”列显示了重新启动的次数。在这种情况下,您应该会看到一些重启,因为当出现错误时,K8S会重复尝试启动pod。
  • 如果Pod处于运行状态,而您的应用程序仍然不能正常工作,请继续提示三和四。

2.检查与Pod相关的事件

如果您在Pod状态上看到其中一个错误代码,您可以使用describe命令获取更多信息。这在容器本身没有启动的情况下很有帮助。

kubectl describe frontend-65c58c957d-f4cqn

Kubernetes Pods故障排除的简单技巧

截图的最后一行表示由于缺乏CPU资源,Pod尚未启动,请参见底部的消息。您可以增加Pod的CPU份额并重新部署应用程序。

3.检日志

截图的最后一行表示由于缺乏CPU资源,Pod尚未启动,请参见底部的消息。您可以增加Pod的CPU份额并重新部署应用程序。

kubectl logs --tail=10 frontend-65c58c957d-bzbg2

Kubernetes Pods故障排除的简单技巧

正在运行的应用程序的Steam日志。

kubectl logs -f frontend-65c58c957d-bzbg2

如果日志的命令没有产生任何输出,那么get pod可能显示了一个新重新启动的pod,因此请检查之前的死pod。

kubectl logs frontend-65c58c957d-bzbg2 --previous

4.直接在pod中运行“sh”、“bash”或“ash”

您可以进入Pods并运行命令来对您的应用程序进行故障排除(点击exit退出)。

kubectl exec -it frontend-65c58c957d-bzbg2 /bin/sh

5.展示集群日志

每当K8S管理的资源的状态发生变化(正常、警告等)时,K8S就会触发事件。他们帮助我们了解幕后发生的事情。get events命令提供事件的聚合透视图。

# all events sorted by time. 
kubectl get events --sort-by=.metadata.creationTimestamp# warnings only
kubectl get events --field-selector type=Warning# events related to Nodes 
kubectl get events --field-selector involvedObject.kind=Node

其他

这是我最喜欢的提示!熟悉命令让您有信心在K8S集群中导航。 首先,在命令列表中键入kubectl。 接下来,尝试这里显示的命令来grep调试命令。

kubectl | grep -i -A 10 debugging

Kubernetes Pods故障排除的简单技巧

列出了可以在K8S资源上运行的基本命令。

kubectl | grep -i -A 5 Basic

Kubernetes Pods故障排除的简单技巧

接下来,列出您可以操作的Kubernetes资源。

kubectl api-resources

Kubernetes Pods故障排除的简单技巧

现在做你自己的命令!您可以选择一个命令(获取、描述、解释)并在这些资源中的一个上运行它!E、g.获取节点。试试别人! 虽然有些组合没有意义,但除此之外,命令系统相当直观和一致;您可以轻松地编写命令和浏览。 只是要小心不要删除或修改你不想触摸的对象。 列出K8S命名空间:

kubectl get ns

Kubernetes Pods故障排除的简单技巧

您可以深入研究特定的命令来理解您的选项和示例。

kubectl get --help# see K8S system pods in 'kube-system' namespace!
kubectl -n kube-system get pods

Kubernetes Pods故障排除的简单技巧

正如您所看到的,K8S命令系统非常容易理解,您可以通过试验这些命令学到很多东西。

总结

在Kubernetes集群中工作很舒服,定位并修复K8S资源和代码中的错误。快速定位排除K8s异常,如果有能力可以阅读K8s源码,对自己的编程能力又非常大的提升,熟悉operator原理和调协可以在异常情况下万变不离其宗的排除。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
TEZNKK3IfmPf