当前位置:首页 > 公众号精选 > 21ic电子网
[导读]在很多情况下,你可能会发现Kubernetes中的应用程序没有正确地部署,或者没有正常地工作。今天这篇文章就提供了如何去快速解决这类故障以及一些技巧。 在阅读了这篇文章之后,你还将深入了解Kubernetes的内部机制,另外,我还将与大家分享一些关于自己操作Kub


在很多情况下,你可能会发现Kubernetes中的应用程序没有正确地部署,或者没有正常地工作。今天这篇文章就提供了如何去快速解决这类故障以及一些技巧。

在阅读了这篇文章之后,你还将深入了解Kubernetes的内部机制,另外,我还将与大家分享一些关于自己操作Kubernetes的一些非常有用的技巧。

那么,我们开始吧!

首先,Pod失败的原因一般有两个:

  1. Kubernetes资源配置中的错误,例如在部署(Deployment)和服务(Service)里。

  2. 代码中的问题。

在第一种情况下,容器一般不会启动。在后一个实例中,应用程序代码在容器启动后失败。我们将系统地处理每种情况。

在本练习中,我们会使用kubectl来实现与Kubernetes的交互。

技巧1:检查Pod

确认Pod处于运行(Running)状态或准备就绪(Ready)的状态。

kubectl get pods
教你5个小技巧,轻松解决Kubernetes Pod故障

如图,一个Pod在等待(Pending)状态9个小时,肯定不是个好事!容器没有启动,我们将会使用技巧2中的describe命令对此进行深入地研究。但,在这里我们强调一下在容器启动失败时发生的其他错误代码。如下:

  • Imagepullbackoff:

    Docker镜像仓库不可访问,部署中指定的镜像名称或版本不正确。

    请确保镜像名称是正确的,并且镜像仓库是可访问的以及经过身份验证的(docker login…)。

  • RunContainerError:

    也是一种可能。

    原因:

    缺少ConfigMap或Secrets。

  • ContainerCreating:

    容器创建时一些组件无法立刻启用,比如持久卷?

在研究其他错误之前,让我们先尝试使用错误的镜像名称启动Pod。

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

教你5个小技巧,轻松解决Kubernetes Pod故障

最后一行展示了镜像错误

果然,完全不存在的镜像“ngin”导致了ImagePullBackOff错误。使用正确的镜像名称“nginx”就能解决这个问题。

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

教你5个小技巧,轻松解决Kubernetes Pod故障

如图,Pod已经起来了。

接下来,这里有一些在容器启动后可能发生的错误。

  • Crashloopbackoff:

    Pod存活检查失败或Docker镜像出错。

    例如,Docker CMD即刻退出。

    可以用下面的技巧3来检查日志。

    注意:

    此截图中的“重启(RESTARTS)”列显示了重启的次数。

    在这种情况下,你应该会看到一些重启,因为当错误发生时,Kubernetes会反复尝试启动Pod。

  • 如果Pod处于运行(Running)状态,而你的应用程序仍然不能正常工作,请继续技巧3和4。

技巧2:检查和Pod相关的事件

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

kubectl describe frontend-65c58c957d-f4cqn
教你5个小技巧,轻松解决Kubernetes Pod故障

截图的最后一行表明,由于缺少CPU资源,Pod还没有启动,请参见底部的消息。你可以增加Pod的CPU再重新部署应用程序。

技巧3:检查日志(Log)

现在容器已经启动,可以通过检查日志来查看应用程序是否正常运行。例如,Pod frontend-65c58c957d-bzbg2:

kubectl logs --tail=10 frontend-65c58c957d-bzbg2
教你5个小技巧,轻松解决Kubernetes Pod故障

实时滚动查看一个正在运行的日志:

kubectl logs -f frontend-65c58c957d-bzbg2

如果kubectl logs后没有任何输出,试试使用get pod,然后会发现这很有可能是一个新启动的Pod,因此可以尝试检查一些上一次挂掉的Pod的日志。

kubectl logs frontend-65c58c957d-bzbg2 --previous


技巧4:直接在Pod中运行“sh”、“bash”或“ash”

可以进入到Pod内部并运行命令来对应用程序进行故障排除(输入exit即可退出)。

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

技巧5:显示集群级别的事件

Kubernetes在它管理的资源状态发生变化(正常、警告等)时触发对应的事件。这能帮助我们了解背后到底发生了什么。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


额外的技巧

这是我最喜欢的技巧!熟练掌握各种命令会使你更有信心在游走在Kubernetes集群中。

首先,输入kubectl可以列出所有kubectl的命令。

接下来,尝试用下面的命令来执行grep调试命令。

kubectl | grep -i -A 10 debugging

教你5个小技巧,轻松解决Kubernetes Pod故障

列出可以在Kubernetes上运行的一些基本命令。

kubectl | grep -i -A 5 Basic

教你5个小技巧,轻松解决Kubernetes Pod故障接下来,列出可操作的Kubernetes资源。

kubectl api-resources

教你5个小技巧,轻松解决Kubernetes Pod故障

现在可以自己搞一些命令了!你可以选择一个命令(get、describe、explain)并选取一个资源然后运行它!例如,get nodes。所以,再试试别的吧!

虽然有些组合可能并没什么意义,但除了这一点,整个command系统是相当直观和一致的;你可以轻松地编写命令并进行各种探索。

只是千万要小心,不要删除或修改你不希望碰到的对象。

列出Kubernetes命名空间(namespace):

kubectl get ns
教你5个小技巧,轻松解决Kubernetes Pod故障

这样,你可以使用特定的命令来更深入地研究相应的选项或示例。

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

教你5个小技巧,轻松解决Kubernetes Pod故障

正如你所看到的,Kubernetes的命令系统非常容易理解,简单地测试这些命令能让我们学到很多东西。

结论

有了这些,我希望你能在Kubernetes集群中找到并修复Kubernetes资源和代码中的错误。同时我打算接下来再介绍一下Kubernetes服务(Service)和网络的调试。

如果你已经走了这么远,我想感谢你对学习Kubernetes的坚持和奉献。请在下面留下你的评论,如果你有什么想法,或者有什么想谈论的话题,也请告诉我。

最后,如果你想在Kubernetes中部署一个真实的应用程序,请阅读我的上一篇文章。然后可以使用命令和故障排除工具对其进行修补。

翻译:伊海峰

来源:http://dockone.io/article/10055

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

21ic电子网

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭