使用describe命令进行Kubernetes pod错误排查

举报
汪子熙 发表于 2021/12/25 21:30:30 2021/12/25
【摘要】 我有一个pod名叫another,用kubectl create创建后发现过了29分钟,状态还是处于ContainerCreating阶段。使用kubectl describe命令检查:从错误消息发现是因为这个pod attach volume失败:FailedAttachVolume 2m1s (x22 over 31m) attachdetach-controller AttachVol...

我有一个pod名叫another,用kubectl create创建后发现过了29分钟,状态还是处于ContainerCreating阶段。

使用kubectl describe命令检查:

从错误消息发现是因为这个pod attach volume失败:

FailedAttachVolume 2m1s (x22 over 31m) attachdetach-controller AttachVolume.Attach failed for volume “pvc-c4d41f5c-e7ed-11e8-8726-fe6d42bf075f” : googleapi: Error 400: RESOURCE_IN_USE_BY_ANOTHER_RESOURCE - The disk resource ‘projects/sap-pi-coo-acdc-dev/zones/europe-west1-b/disks/shoot–k8s-train–shac-pvc-c4d41f5c-e7ed-11e8-8726-fe6d42bf075f’ is already being used by ‘projects/sap-pi-coo-acdc-dev/zones/europe-west1-b/instances/shoot–k8s-train–shacw46-worker-prvfv-z1-7844dc6744-ghd5m’

Warning FailedMount 31s (x14 over 29m) kubelet, shoot–k8s-train–shacw46-worker-prvfv-z1-7844dc6744-hhrmd Unable to mount volumes for pod “another_part-0110(13f15fa4-e819-11e8-8726-fe6d42bf075f)”: timeout expired waiting for volumes to attach or mount for pod “part-0110”/“another”. list of unmounted volumes=[content-storage]. list of unattached volumes=[content-storage default-token-6z5sk]

查看这个pod的yaml文件,果然发现有一个persistent volume的claim:

用命令kubectl get pv, 发现当前所有的persistent volume都被占用了(BOUND状态):

解决方案有很多种,处于测试目的,我只是简单地将另一个同样声明了nginx-pvc作为PersistentVolumeClaim的pod删除,然后这个名为another的pod状态就很快变成Running了:

从describe命令生成的日志里也能清楚的观察到这个成功mount volume的事件:

Normal SuccessfulAttachVolume 84s attachdetach-controller AttachVolume.Attach succeeded for volume “pvc-c4d41f5c-e7ed-11e8-8726-fe6d42bf075f”

通过describe命令学习Kubernetes的pod属性详解

我们可以首先使用kubectl get pods命令得到pod列表,比如我们想研究pod nginx-storage-pod的明细:

使用命令kubectl describe pod nginx-storage-pod > nginx-storage-pod.yaml, 将describe命令的输出重定向到一个yaml文件里。用vi打开这个yaml文件:

pod的所有属性可以从这个yaml文件里学习:

node:shoot–k8s-train–shacw46-worker-prvfv-z1-7844dc6744-ghd5m/10.250.0.6

表明pod所在的node,这个node一定是命令kubectl get node返回的结果之一:

image

Image:代表该pod是基于哪一个docker image创建的。

Mount:该pod使用的persistent volume对应的物理文件目录,我的例子是.usr/share/nginx/html

这个路径从哪里来的呢?就是我的pod文件的yaml文件里的定义:

describe命令除了本文介绍的可以用来深入学习pod的属性外,还可以用于pod不能正常启动时的错误排查。

比如我有一个pod名为another3,状态一直处于CrashLoopBackOff, RESTART次数为12:

使用kubectl describe pod another3就可以看到这个容器启动的明细:Back-off restarting failed container

仔细检查pod的yaml文件,发现原因是因为我定义了volume的name为content-storage,但是没有指定persistentvolumeclaim。当我把volumes: - name: content-storage删除之后,

下图是修改后的yaml文件:

重新创建名为another3的pod,很快就创建成功并且状态处于running了:

要获取更多Jerry的原创文章,请关注公众号"汪子熙"。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。