解决Kubernetes Pod故障的5个简单技巧
2021-03-17 01:25
标签:temp ras 选项 使用 plain 关于 sele asi img 在很多情况下,你可能会发现Kubernetes中的应用程序没有正确地部署,或者没有正常地工作。今天这篇文章就提供了如何去快速解决这类故障以及一些技巧。 在阅读了这篇文章之后,你还将深入了解Kubernetes的内部机制,另外,我还将与大家分享一些关于自己操作Kubernetes的一些非常有用的技巧。 那么,我们开始吧! 首先,Pod失败的原因一般有两个: 在第一种情况下,容器一般不会启动。在后一个实例中,应用程序代码在容器启动后失败。我们将系统地处理每种情况。 在本练习中,我们会使用kubectl来实现与Kubernetes的交互。 确认Pod处于运行(Running)状态或准备就绪(Ready)的状态。 如图,一个Pod在等待(Pending)状态9个小时,肯定不是个好事!容器没有启动,我们将会使用技巧2中的describe命令对此进行深入地研究。但,在这里我们强调一下在容器启动失败时发生的其他错误代码。如下: 在研究其他错误之前,让我们先尝试使用错误的镜像名称启动Pod。 最后一行展示了镜像错误 果然,完全不存在的镜像“ngin”导致了ImagePullBackOff错误。使用正确的镜像名称“nginx”就能解决这个问题。 如图,Pod已经起来了。 接下来,这里有一些在容器启动后可能发生的错误。 如果你在Pod状态上看到一个错误代码,你可以使用describe命令获得更多信息。这在容器本身没有启动的情况下是很有帮助的。 截图的最后一行表明,由于缺少CPU资源,Pod还没有启动,请参见底部的消息。你可以增加Pod的CPU再重新部署应用程序。 现在容器已经启动,可以通过检查日志来查看应用程序是否正常运行。例如,Pod frontend-65c58c957d-bzbg2: 实时滚动查看一个正在运行的日志: 如果kubectl logs后没有任何输出,试试使用get pod,然后会发现这很有可能是一个新启动的Pod,因此可以尝试检查一些上一次挂掉的Pod的日志。 可以进入到Pod内部并运行命令来对应用程序进行故障排除(输入exit即可退出)。 Kubernetes在它管理的资源状态发生变化(正常、警告等)时触发对应的事件。这能帮助我们了解背后到底发生了什么。get events命令能提供事件的聚合透视图。 这是我最喜欢的技巧!熟练掌握各种命令会使你更有信心在游走在Kubernetes集群中。 首先,输入kubectl可以列出所有kubectl的命令。 接下来,尝试用下面的命令来执行grep调试命令。 列出可以在Kubernetes上运行的一些基本命令。 接下来,列出可操作的Kubernetes资源。 现在可以自己搞一些命令了!你可以选择一个命令(get、describe、explain)并选取一个资源然后运行它!例如,get nodes。所以,再试试别的吧! 虽然有些组合可能并没什么意义,但除了这一点,整个command系统是相当直观和一致的;你可以轻松地编写命令并进行各种探索。 只是千万要小心,不要删除或修改你不希望碰到的对象。 列出Kubernetes命名空间(namespace): 这样,你可以使用特定的命令来更深入地研究相应的选项或示例。 正如你所看到的,Kubernetes的命令系统非常容易理解,简单地测试这些命令能让我们学到很多东西。 最后给大家一个大福利,扫描添加,发送"阿里云",即可免费获得 整整172页的《阿里云内部超全K8s实战手册》 解决Kubernetes Pod故障的5个简单技巧 标签:temp ras 选项 使用 plain 关于 sele asi img 原文地址:https://www.cnblogs.com/douhua7458/p/13041754.html
技巧1:检查Pod
1.kubectl get pods
1.# start Pod from image "ngin".
2.# ‘web‘ can be any name, is the name of resulting K8S deployment
3.kubectl run web --image=ngin --replicas=1
1.kubectl run temp --image=nginx --replicas=1
2.
3.kubectl get pods
技巧2:检查和Pod相关的事件
1.kubectl describe frontend-65c58c957d-f4cqn
技巧3:检查日志(Log)
1.kubectl logs --tail=10 frontend-65c58c957d-bzbg2
1.kubectl logs -f frontend-65c58c957d-bzbg2
1.kubectl logs frontend-65c58c957d-bzbg2 --previous
技巧4:直接在Pod中运行“sh”、“bash”或“ash”
1.kubectl exec -it frontend-65c58c957d-bzbg2 /bin/sh
技巧5:显示集群级别的事件
1.# all events sorted by time.2.
kubectl get events --sort-by=.metadata.creationTimestamp# warnings onlykubectl get events --field-selector type=Warning# events related to Nodeskubectl get events --field-selector involvedObject.kind=Node
额外的技巧
1.kubectl | grep -i -A 10 debugging
1.kubectl | grep -i -A 5 Basic
1.kubectl api-resources
1.kubectl get ns
1.kubectl get --help
2.
3.# see K8S system pods in ‘kube-system‘ namespace!
4.
5.kubectl -n kube-system get pods
下一篇:前端基础之css