k8s环境如何调试一启动就挂掉的pod

1 问题描述

k8s中pod一开始运行,马上挂起死掉,每次手忙脚乱的敲好kubeclt log -n XXX ,还来不及看到,pod已经挂了,日志也没看到。

2 解决思路

2.1 pod运行先不执行原来的命令,执行sleep 3600 秒保持pod存活

2.2 找到pod之前运行的命令,进入pod内部直接输入运行命令,显式查看运行日志,找到报错原因。

3 实践

3.1 得到容器运行命令

新版的k8s环境使用containerd,不再使用docker,如何参看容器内的运行命令?docker是通过使用 docker inspect img_id 得到,在containerd环境下的操作思路是一样的,先找到关注的pod在哪个node运行,然后在该node得到image id,再使用crictl inpecti XXXX得到pod启动时候的运行命令

3.1.1 找到pod的运行pod

[root@node1 ingress_down]# kubectl get pod -n com-pre -owide|grep test
test-service-7cbddfccdc-zvtmw 2/2 Running 0 23h 10.244.33.139 node5

3.1.2 转到对应node,使用crictl images,得到pod使用的镜像id:

[root@node5 ~]# crictl images |grep test
harbor.myserver.com/data-sec/test 1.0.4 44c4651ee5970 327MB

3.1.3 使用 crictl inspecti image_id,得到打包镜像中的启动命令

[root@node5 ~]# crictl inspecti 44c4651ee5970


{
“created”: “2022-07-11T01:45:32.489102244Z”,
“created_by”: "/bin/sh -c #(nop) ENTRYPOINT [“java” “-Djava.security.egd=file:/dev/./urandom " “-jar” “/test.jar”]”,
“empty_layer”: true
}

通过上述操作,得到了test 镜像中的运行命令是:
java -Djava.security.egd=file:/dev/./urandom -jar test.jar

3.2 修改test.yaml文件


- name: test-service
image: harbor.myserver.com/data-sec/test:1.0.6
#command: [“/bin/sh”,“-c”,“touch /tmp/test; sleep 30; rm -f /tmp/test; sleep 3600”] #使用这句sleep,替代缺省的运行命令
imagePullPolicy: IfNotPresent
resources:
limits:

3.3 apply 新的yaml文件,进入容器,运行3.1.3得到的命令,观察运行日志排查错误

3.3.1 apply新的yaml文件

[root@node1 ingress_down]# kubectl apply -f test.yaml

3.3.2 进入pod

[root@node1 ingress_down]# kubectl exec -it -n my_ns test-service-7cbddfccdc-zvtmw -c test-service – /bin/bash

3.3.3 在pod内部输入命令行

然后在pod里直接运行上面得到的命令行:java -Djava.security.egd=file:/dev/./urandom -jar test.jar ,观察日志输出,进行调试
[root@kms-pm-service-7cbddfccdc-zvtmw /]# java -Djava.security.egd=file:/dev/./urandom -jar test.jar

3.3.4 从容调试,观察输出日志吧

这样就可以从容的观察日志,进行调试了,也不用担心报错后pod挂掉看不到输出日志。

4 总结

大部分报错直接用kubectl log 就可以看到报错日志,如果遇到一运行就报错,都看不到日志输出的情况,可以尝试使用上面的解决思路。希望这篇笔记能对大家有用。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值