容器化开发_03_Pod报错不断重启
Posted 毛奇志
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器化开发_03_Pod报错不断重启相关的知识,希望对你有一定的参考价值。
文章目录
Pod不断重启三种原因
有三种原因:
(1) 程序有问题,程序没启动成功,所以容器无法启动,但是k8s中的Pod默认restartPolicy重启策略是always,所以不断重启
(2) 程序占用内存太大,linux机器无法满足,但是k8s中的Pod默认restartPolicy重启策略是always,所以Pod不断重启,这种情况下还会导致linux机器不断重启
(3) 没有程序或者程序无法常驻运行,所以容器停止了,但是k8s中的Pod默认restartPolicy重启策略是always,所以不断重启
三种原因特定标志:
(1) Crash状态的时候,能够通过 docker logs 看到日志
(2) linux上执行 last reboot 发现机器没间隔几分钟不断重启
(3) kubectl describe pod 最后一行为 Warning Back-off restarting failed container
问题1:程序有问题,启动不成功,导致Pod不断重启
特定标志:Crash状态的时候,能够通过 docker logs 看到日志
归纳出问题:根据这个特定标志,可以断定是因为程序有问题,程序没启动成功,所以容器无法启动,但是k8s中的Pod默认restartPolicy重启策略是always,所以不断重启
解决方法:如果是程序有问题,那么等到Pod的状态是 Crash 的时候,docker logs xxx(pod-name) -n xxx(ns-name) 查看日志,定位到程序的问题,然后解决,方为治本之策
注意:等到Pod的状态是 Crash 的时候,使用 docker logs 才能看到错误日志,如果Pod的状态是Running的时候,使用 docker logs 是看不到错误日志的。因为 k8s中的Pod默认restartPolicy重启策略是always ,所以 Running 和 Crash 状态交替,等到 Crash 才使用 docker logs 找出错误日志不是难事。
问题2:程序占用内存太大,linux机器无法满足,导致Pod不断重启
特定标志:linux上执行 last reboot 发现机器没间隔几分钟不断重启
归纳出问题:程序占用内存太大,linux机器无法满足,但是k8s中的Pod默认restartPolicy重启策略是always,所以Pod不断重启,这种情况下还会导致linux机器不断重启
解决方法:通过yaml中的 command: 限制一下需要的内存占用量
问题3:程序中没有前台进程,导致Pod不断重启
现象描述:kubectl get pod 看到 pod启动后一直重启,kubectl describe pod 最后一行看到 Back-off restarting failed container。
kubectl get pod -n xxx(ns-name)
发现pod restart列,就是重启次数很多
kubectl describe pod xxx(pod-name) -n xxx(ns-name)
describe命令得到的最下面的报错信息是 BACK-OFF RESTARTING FAILED CONTAINER
特定标志:kubectl describe pod 最后一行为 Warning Back-off restarting failed container
本质原因:Back-off restarting failed container的Warning事件,一般是由于通过指定的镜像启动容器后,容器内部没有常驻进程,导致容器启动成功后即退出,从而进行了持续的重启。
归纳出问题: 没有程序或者程序无法常驻运行,所以容器停止了,但是k8s中的Pod默认restartPolicy重启策略是always,所以不断重启
解决方法:找到对应的deployment command: [“/bin/bash”, “-ce”, “tail -f /dev/null”]
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-file
namespace: model
labels:
appkey: test-file
spec:
replicas: 1
selector:
matchLabels:
appkey: test-file
template:
metadata:
labels:
appkey: test-file
spec:
containers:
- name: test-file
image: xxx:v1
command: ["/bin/bash", "-ce", "tail -f /dev/null"]
imagePullPolicy: IfNotPresent
volumeMounts:
- name: test-file-data
mountPath: /mnt
volumes:
- name: test-file-data
hostPath:
path: /mnt
以上是关于容器化开发_03_Pod报错不断重启的主要内容,如果未能解决你的问题,请参考以下文章
KUBERNETES03_命名空间Pod是什么Deployment多副本能力扩缩容自愈或故障转移滚动更新版本回退
KUBERNETES03_命名空间Pod是什么Deployment多副本能力扩缩容自愈或故障转移滚动更新版本回退
容器化开发_02_Docker判断程序是否起来?Docker定位容器错误?